Что касается 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 shutdown.
(3) Если скрипт выполняет только операции чтения, используйте команду «kill script» для немедленной остановки скрипта; Если скрипт выполняет операцию записи, только команда shutdown save/nosave разрешена для остановки сервера и предотвращения записи текущих данных на диск. (В этот момент сервер не работает, и данные не будут сохранены)
пример
Выполните скрипт, параметры — 2 ключа и значение, а команда звучит следующим образом:
Deadloop-скрипты, выполняющие следующий скрипт, приводят к тому, что redis не сможет обрабатывать другие команды и застрянет:
Попробуйте использовать скрипт для добавления данных строки типа со следующей командой:
Выполните более сложные скрипты, если значение ключа равно введённому нашему значению, затем удалите кэш, иначе делайте что-нибудь — команда следующая:
Результаты реализации следующие:
(Конец)
|