0Pricing
Lua Academy · Урок

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 hello

redis.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 — локальная установка не требуется.

Все уроки этого курса

  1. EVAL и окружение Redis Lua
  2. Атомарные операции и транзакции
  3. Ограничение частоты запросов с Lua
  4. SCRIPT LOAD и EVALSHA
← Назад к Lua Academy