Учебное пособие по написанию сценариев Redis Lua для начальной школы

Redis

Redis предоставляет богатый набор инструкций, но все же не может соответствовать всем сценариям.В некоторых конкретных сценариях необходимо настроить некоторые спецификации для выполнения определенных функций. Поэтому Redis обеспечивает поддержку сценариев Lua, и пользователи могут писать свои собственные сценарии для достижения желаемых функций.

Что такое Луа?

Lua — это мощный, эффективный, легкий, встраиваемый язык сценариев. Это язык с динамической типизацией, который работает путем интерпретации байт-кода с использованием виртуальной машины на основе регистров и имеет автоматическое управление памятью с добавочной сборкой мусора, что делает его лучшим выбором для настройки, сценариев и быстрого прототипирования.

Как Redis выполняет сценарии Lua

ОЦЕНКА команда

Redis может использовать команду EVAL для выполнения соответствующего сценария Lua.

> EVAL 'local val="Hello Jackey" return val' 0
"Hello Jackey"

Вы можете выполнять Lua-скрипты в интерактивном режиме, подобно этому, что упрощает обработку ошибок. Просто этого недостаточно, иногда нам нужно передать какие-то параметры Lua-скрипту. Внимательные студенты наверняка заметили, что после скрипта стоит цифра 0, что означает, что параметры не передаются.

Как передать параметры?

> EVAL 'local val=KEYS[1] return val.." "..ARGV[1]' 1 Hello Redis
"Hello Redis"

Фактически, очень простые, параметры передаются в виде KV, эта цифра представляет количество прошедших параметров ключевых параметров, а затем задняя часть - это ключ N и N-значение. В скрипте следует понимать, что получить соответствующее значение из массива и клавиш ARGV Arry, индекс 1 от начала.

Две точки в приведенном выше примере — это операторы конкатенации строк в сценариях Lua.

Теперь мы знаем, как выполнять Lua-скрипты в Redis, но такие скрипты не имеют ничего общего с Redis, как мы можем манипулировать данными в Redis? Пожалуйста, продолжайте смотреть мое выступление

> get my_name
"Jackeyzhe"
> EVAL 'local val=ARGV[1].." "..redis.call("get",KEYS[1]) return val' 1 my_name Hello
"Hello Jackeyzhe"

Используйте redis.call или redis.pcall (упоминается позже) для работы с redis.

Следует отметить, что если возвращается следующая ошибка, это означает, что ключ, который необходимо получить, не существует.

> EVAL 'local val=ARGV[1].." "..redis.call("get",KEYS[1]) return val' 1 me Hello
(error) ERR Error running script (call to f_eb11f8ddeeee07cc88d1f3bd103069284b83c5d8): @user_script:1: user_script:1: attempt to concatenate a boolean value

Мы можем использовать описанный выше метод для выполнения некоторых простых сценариев Lua.Если мы хотим выполнить более сложные сценарии Lua, команда EVAL будет раздутой и запутанной. Итак, Redis предоставляет другой метод.

redis-cli --eval

Мы можем сначала написать файл Lua, а затем выполнить его с помощью команды redis-cli.

local name=redis.call("get", KEYS[1])
local greet=ARGV[1]
local result=greet.." "..name
return result
> redis-cli --eval hello.lua my_name , Hello
"Hello Jackey"

Таким образом, мы можем сначала написать файл .lua. Разлученный ключ и ARGV.

EVALSHA

Вы думали, что это закончилось? Тогда слишком наивен. Что, если мы находимся в интерактивном режиме Redis и хотим выполнить файл сценария? Выходить каждый раз и снова подключаться после выполнения? Это слишком большая проблема. Redis предоставляет команду EVALSHA, которая позволяет нам выполнять файлы сценариев в интерактивном режиме.

Во-первых, вам нужно загрузить файл скрипта

$ redis-cli SCRIPT LOAD "$(cat hello.lua)"
"463ff2ca9e78e36cd66ee9d37ee0dcd59100bf46"

Вы получите строку шестнадцатеричных чисел, которая однозначно идентифицирует этот сценарий. После получения этого числа, это означает, что мы загрузили скрипт на сервер, и тогда мы можем использовать этот идентификатор для выполнения скрипта.

> EVALSHA 463ff2ca9e78e36cd66ee9d37ee0dcd59100bf46 1 my_name Hello
"Hello Jackeyzhe"

убить скрипт

Время выполнения скриптов Lua в Redis по умолчанию составляет 5 секунд. Обычно время выполнения скриптов указывается в миллисекундах. Если время выполнения истекло, скрипт не остановится, но будет записан журнал ошибок.

Есть два способа завершить выполнение скрипта

  1. Используйте команду Script Script
  2. Выключите сервер с помощью команды SHUTDOWN NOSAVE.

Однако не рекомендуется вручную завершать работу скрипта.

Суммировать

В этой статье кратко рассказывается, что такое Lua и как Redis выполняет и завершает сценарии Lua. Если вы его освоили, то поздравляем вас с окончанием начальной школы Lua. В средней школе Lua вы более подробно узнаете Redis о командах Lua.