Redis может атомарно проверить остаток и создать резерв через Lua-скрипт, не выполняя отдельные read и write. Но защита от overselling требует согласования долговечного учёта и отказов.
Как решить проблему конкурентного доступа к товару при распродаже? Как использовать Redis для решения этой проблемы без блокировки на уровне БД?
Redis может атомарно проверить остаток и создать резерв через Lua-скрипт, не выполняя отдельные read и write. Но защита от overselling требует согласования долговечного учёта и отказов.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Redis может атомарно проверить остаток и создать резерв через Lua-скрипт, не выполняя отдельные read и write. Но защита от overselling требует согласования долговечного учёта и отказов.
Скрипт должен проверять доступное количество, уменьшать его и фиксировать уникальный ID резерва. Повтор с тем же ID возвращает прежний результат. Резерв имеет срок и переходы подтверждения/отмены; возвращать остаток нужно ровно один раз. Асинхронная репликация или потеря Redis способны нарушить гарантии, если он единственный источник истины. Для строгой корректности нужны надёжный журнал/хранилище и reconciliation либо атомарное условное изменение в БД. «Без ручного DB-lock» не означает «без контроля согласованности».