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

KEYS * в проде

Вопрос

Чтобы сбросить кеш пользователя, код делает redis.keys("user:42:*"). Почему это плохо в проде с миллионами ключей?

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

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

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

Коротко

Правильный ответ: KEYS обходит все ключи разом и блокирует Redis для всех. Redis обрабатывает команды последовательно, и долгая команда задерживает все остальные.

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

  1. KEYS обходит все ключи разом и блокирует Redis для всехправильный ответ
  2. KEYS не поддерживает шаблоны со звёздочкой
  3. KEYS удаляет найденные ключи вместе с данными
  4. KEYS работает только в кластерном режиме Redis

Разбор

Redis обрабатывает команды последовательно, и долгая команда задерживает все остальные. KEYS сканирует всё пространство ключей разом. Вместо него используют SCAN с курсором порциями или, лучше, хранят ключи пользователя в множестве (или используют версию в имени ключа), чтобы не искать их.

  • Шаблоны KEYS поддерживает.
  • Он только возвращает имена, удаление делает DEL.
  • В кластере KEYS как раз неудобен: работает в пределах одного узла.

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

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