Щодо redis, його часто використовують усі, і найпоширенішим варіантом є кешування даних.
огляд
Починаючи з redis 2.6.0, redis має вбудований інтерпретатор Lua і надає команду eval для розбору оцінки скриптів Lua.
Синтаксис: eval script numkeys keys args
Параметри:
eval — Redis надає команди для розбору lua-скрипту
Сценарій — lua script
numkeys — Визначає кількість ключів у наборі параметрів keyname
ключі — набір параметрів keyname, представлений глобальним масивом змінної KEYS, починаючи з індекса 1
args — Набір ключових параметрів, представлених масивом глобальних змінних ARGV, починаючи з індексу 1
Переваги використання Lua в Redis
Зменшити накладні витрати мережі. Одночасно можна надсилати кілька запитів у вигляді скриптів для зменшення затримки в мережі Атомна маніпуляція. Redis виконує весь скрипт у цілому, без додаткових команд між ними. Тому немає потреби турбуватися про умови гонки та транзакції під час процесу скриптування. Відновлено. Кроки, які надсилає клієнт, постійно зберігаються в redis, щоб інші клієнти могли повторно використовувати скрипт без необхідності використовувати код для виконання тієї ж логіки.
Атомарність письма
Lua-скрипти не можуть мати трудомісткі операції або «мертві цикли», інакше redis не прийматиме інші команди і не виконується, щоб зупинити роботу скрипта
Redis використовує один інтерпретатор Lua для запуску всіх скриптів і забезпечує атомарне виконання скриптів.Це означає, що під час запуску скрипту жодні інші скрипти чи команди redis не виконуються! Тому, якщо поточний скрипт працює повільно, сервер може не змогти виконати команду через завантаженість, наприклад:
Кожен скрипт має максимальний ліміт часу виконання, стандартне значення — 5s. Максимальний час виконання контролюється опцією lua-time-limit у конфігураційному файлі redis.conf або безпосередньо за допомогою команд config get і config set. Коли виконання скрипту досягає максимального часу виконання, Redis не завершує його активно, а виконує наступні кроки:
(1) Redis фіксує, що у скрипта закінчується час
(2) Redis починає повторно приймати запити від інших клієнтів, але приймає лише виконання команд на знищення скриптів і nosave вимкнення.
(3) Якщо скрипт виконує лише операції читання, використайте команду знищення скрипту, щоб негайно зупинити скрипт; Якщо скрипт виконує операцію запису, лише команда shutdown save/nosave дозволена зупинити сервер і запобігти запису поточних даних на диск. (На цьому етапі сервер не працює, і дані не зберігаються)
приклад
Виконайте скрипт, параметри — 2 ключі та значення, а команда звучить так:
Deadloop-скрипти, виконання наступного скрипта призводить до того, що redis не може обробляти інші команди і застрягає:
Спробуйте використати скрипт, щоб додати дані рядка типу за допомогою наступної команди:
Виконуйте більш складні скрипти, якщо значення ключа дорівнює введеному, потім видаліть кеш, інакше робіть щось, команда виглядає так:
Результати впровадження такі:
(Кінець)
|