Каким образом атомарные Lua-скрипты в Redis помогают реализовывать сложную бизнес-логику, например rate limiter, без состояний гонки?

Lua-скрипт выполняет проверку и изменение данных без вклинивания других команд Redis. Поэтому счётчик, лимит и TTL можно согласованно обновить одним вызовом вместо гонки между GET и SET.

Короткий ответ

Что ответить на собеседовании

Lua-скрипт выполняет проверку и изменение данных без вклинивания других команд Redis. Поэтому счётчик, лимит и TTL можно согласованно обновить одним вызовом вместо гонки между GET и SET.

Подробный разбор

Ответ с пояснениями

Lua-скрипт выполняет проверку и изменение данных без вклинивания других команд Redis. Поэтому счётчик, лимит и TTL можно согласованно обновить одним вызовом вместо гонки между GET и SET.

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

Источник: redis.io, redis.io.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее