EVAL и окружение Redis Lua
Выполняйте скрипты Lua с помощью EVAL, изучайте KEYS/ARGV и кэширование скриптов.
«EVAL и окружение Redis Lua» — бесплатный урок Lua Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.
Зачем Lua в Redis?
Redis позволяет выполнять скрипты Lua внутри сервера с помощью EVAL. Скрипты выполняются атомарно — никакая другая команда Redis не выполняется одновременно, что позволяет безопасно выполнять многошаговые операции.
Команда EVAL
EVAL script numkeys key [key ...] arg [arg ...] — скрипт обращается к ключам через таблицу KEYS, а к аргументам — через таблицу ARGV (индексация начинается с 1).
-- Redis CLI:
EVAL "return KEYS[1]" 1 mykey
-- Returns: mykeyДоступ к KEYS и ARGV
В Lua KEYS и ARGV — это глобальные таблицы, заполненные командой EVAL.
EVAL "
local key = KEYS[1]
local val = ARGV[1]
redis.call('SET', key, val)
return redis.call('GET', key)
" 1 greeting helloredis.call и redis.pcall
redis.call(cmd, ...) выполняет команду Redis и вызывает ошибку Lua при сбое. redis.pcall вместо этого возвращает таблицу ошибки.
local ok, err = pcall(function()
redis.call("INVALID_CMD")
end)
if not ok then print("Error caught:", err) endВозвращаемые значения
Типы Lua преобразуются в типы ответов Redis: числа → целые числа, строки → строки с данными, таблицы → многоблочные массивы, false/nil → ответ nil, true → целое число 1.
Кэширование скриптов
Redis кэширует скомпилированные скрипты по SHA1. Первый вызов EVAL компилирует скрипт и помещает его в кэш. Последующие вызовы с тем же SHA через EVALSHA пропускают компиляцию.
Доступ к типам данных Redis
Все стандартные команды Redis доступны через redis.call: GET, SET, HGET, LPUSH, EXPIRE и другие.
local count = redis.call("INCR", KEYS[1])
redis.call("EXPIRE", KEYS[1], 3600)
return countГарантия атомарности
Пока выполняется скрипт Lua, Redis блокирует всех остальных клиентов. Скрипты должны выполняться быстро — от микросекунд до миллисекунд. Долгие скрипты блокируют весь сервер.
Версия Lua в Redis
Redis включает Lua 5.1 (или совместимую с 5.1 версию). Некоторые возможности, например goto и bit32, могут отличаться. Для работы с JSON и MessagePack используйте предоставляемые Redis библиотеки cjson и cmsgpack.
Рекомендации по обработке ошибок
Используйте redis.pcall для операций, которые могут завершиться ошибкой, например из-за несовпадения типов. Возвращайте структурированные таблицы ошибок, чтобы клиент мог их интерпретировать.
Отладка скриптов Redis
Используйте redis.log(redis.LOG_DEBUG, "message"), чтобы записывать отладочные сообщения в журнал Redis. Тестируйте скрипты в redis-cli с помощью EVAL до выполнения SCRIPT LOAD.
Вопрос о Redis Lua
Каково главное преимущество выполнения скриптов Lua в Redis с помощью EVAL?
Повторение: EVAL и окружение Redis Lua
EVAL атомарно выполняет скрипты Lua в Redis. Обращайтесь к ключам через KEYS[n], а к аргументам — через ARGV[n]. Используйте redis.call для выполнения команд. Скрипты кэшируются по SHA1. Следите за тем, чтобы скрипты выполнялись быстро и не блокировали сервер.
Часто задаваемые вопросы
Урок «EVAL и окружение Redis Lua» бесплатный?
Да — полный текст урока «EVAL и окружение Redis Lua» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.
Чему я научусь в уроке «EVAL и окружение Redis Lua»?
Выполняйте скрипты Lua с помощью EVAL, изучайте KEYS/ARGV и кэширование скриптов. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Lua Academy?
Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «EVAL и окружение Redis Lua»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Lua Academy?
Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- EVAL и окружение Redis Lua
- Атомарные операции и транзакции
- Ограничение частоты запросов с Lua
- SCRIPT LOAD и EVALSHA