Выбор ответа Middle Кеш и очереди обновлено
KEYS * в проде
Вопрос
Чтобы сбросить кеш пользователя, код делает redis.keys("user:42:*"). Почему это плохо в проде с миллионами ключей?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: KEYS обходит все ключи разом и блокирует Redis для всех. Redis обрабатывает команды последовательно, и долгая команда задерживает все остальные.
Варианты ответа
- KEYS обходит все ключи разом и блокирует Redis для всехправильный ответ
- KEYS не поддерживает шаблоны со звёздочкой
- KEYS удаляет найденные ключи вместе с данными
- KEYS работает только в кластерном режиме Redis
Разбор
Redis обрабатывает команды последовательно, и долгая команда задерживает все остальные. KEYS сканирует всё пространство ключей разом. Вместо него используют SCAN с курсором порциями или, лучше, хранят ключи пользователя в множестве (или используют версию в имени ключа), чтобы не искать их.
- Шаблоны KEYS поддерживает.
- Он только возвращает имена, удаление делает DEL.
- В кластере KEYS как раз неудобен: работает в пределах одного узла.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.