Lua-скрипт выполняет проверку и изменение данных без вклинивания других команд Redis. Поэтому счётчик, лимит и TTL можно согласованно обновить одним вызовом вместо гонки между GET и SET.
Каким образом атомарные Lua-скрипты в Redis помогают реализовывать сложную бизнес-логику, например rate limiter, без состояний гонки?
Lua-скрипт выполняет проверку и изменение данных без вклинивания других команд Redis. Поэтому счётчик, лимит и TTL можно согласованно обновить одним вызовом вместо гонки между GET и SET.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Lua-скрипт выполняет проверку и изменение данных без вклинивания других команд Redis. Поэтому счётчик, лимит и TTL можно согласованно обновить одним вызовом вместо гонки между GET и SET.
Для fixed-window limiter скрипт увеличивает счётчик, при первом обращении задаёт TTL и возвращает решение относительно лимита. Входы и типы данных нужно проверить до изменений: атомарность исполнения не означает автоматического отката всех записей при runtime-ошибке. Долгий скрипт задерживает остальные команды, поэтому работа должна быть ограниченной. В Redis Cluster связанные ключи размещают в совместимом слоте; внешнюю БД такой скрипт в общую транзакцию не включает.