Получить доступ

Что такое cache stampede?

MiddleRedis и кэшированиеRedis
Ещё спрашивают так:
  • Что такое thundering herd в кэше?
Коротко

Давка — популярный ключ истёк или кэш перезапустился, и множество запросов одновременно идут в базу за одним значением.

  • Разброс TTL — ключи не истекают синхронно
  • Single flight — пересчитывает один запрос (блокировка SET NX), остальные ждут или берут старое
  • Stale-while-revalidate — отдать устаревшее, обновить в фоне; ранний пересчёт до истечения

А ещё Холодный старт кэша — прогрев и ограничитель нагрузки на базу

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Как возникает. Популярный ключ (главная страница, конфигурация, товар дня) читают тысячи раз в секунду. Когда он истекает, все запросы в эту секунду промахиваются и идут в базу за одним и тем же. База получает сотни одинаковых тяжёлых запросов и может не выдержать. То же при массовом истечении ключей с одинаковым TTL и при перезапуске кэша.

Приёмы:

  • разброс TTL — ttl + random(0..10%): истечения разнесены во времени;
  • single flight — при промахе запрос пытается взять блокировку SET lock:key 1 NX EX 5; получивший идёт в базу и обновляет кэш, остальные ждут коротко и перечитывают кэш (или получают предыдущее значение). В одном процессе — объединение запросов в памяти (singleflight в Go, Caffeine.get(key, loader));
  • stale-while-revalidate — хранить значение дольше TTL с меткой свежести: после «мягкого» истечения отдавать старое и обновлять в фоне;
  • ранний вероятностный пересчёт — чем ближе истечение, тем выше шанс, что запрос обновит значение заранее (XFetch);
  • прогрев после перезапуска и ограничитель параллельных запросов к базе.

Что хотят услышать

  • Механизм давки и когда она случается.
  • Несколько приёмов защиты и их сравнение.
  • Холодный старт кэша — плюс.

Частые ошибки

  • Одинаковый TTL у всех ключей.
  • Блокировка без таймаута: упавший держатель вешает всех.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Множество запросов одновременно промахиваются по горячему ключу и разом идут в БД
  • ✗Переполнение кэша из-за слишком большого TTL
  • ✗Очистка кэша при перезапуске приложения
  • ✗Шифрование данных, лежащих в кэше

Что спросят дальше

  • Что такое hot key?
  • Как Redis SET NX PX помогает lock-у?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем