Выбор ответа Middle Кеширование обновлено

Защита от stampede блокировкой

Вопрос

Как с помощью Redis сделать так, чтобы истёкший ключ пересчитывал только один запрос?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Взять блокировку SET lock:key token NX EX 30; взявший пересчитывает. SET ...

Варианты ответа

  1. Увеличить maxmemory, чтобы ключи не вытеснялись и не истекали
  2. Взять блокировку SET lock:key token NX EX 30; взявший пересчитываетправильный ответ
  3. Использовать KEYS * по расписанию, чтобы заранее найти истекающие ключи
  4. Отключить TTL у всех ключей и обновлять их вручную при изменениях

Разбор

SET ... NX устанавливает ключ, только если его нет, поэтому блокировку получит один запрос. EX ограничивает время жизни блокировки, если процесс упадёт. Снимать блокировку нужно, проверив свой токен, чтобы не удалить чужую. KEYS * блокирует Redis на больших базах, maxmemory не связан с пересчётом, а без TTL данные устаревают навсегда.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.