Что такое cache stampede?
- Что такое thundering herd в кэше?
Давка — популярный ключ истёк или кэш перезапустился, и множество запросов одновременно идут в базу за одним значением.
- Разброс TTL — ключи не истекают синхронно
- Single flight — пересчитывает один запрос (блокировка
SET NX), остальные ждут или берут старое - Stale-while-revalidate — отдать устаревшее, обновить в фоне; ранний пересчёт до истечения
А ещё Холодный старт кэша — прогрев и ограничитель нагрузки на базу
Подробно
Как возникает. Популярный ключ (главная страница, конфигурация, товар дня) читают тысячи раз в секунду. Когда он истекает, все запросы в эту секунду промахиваются и идут в базу за одним и тем же. База получает сотни одинаковых тяжёлых запросов и может не выдержать. То же при массовом истечении ключей с одинаковым 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-у?
Разбор темы
- Redis и кэширование
Cache-aside и стратегии записи, TTL и eviction, защита от stampede и аккуратные распределённые блокировки.
Связанные вопросы
- Популярный ключ истекает, и сотни параллельных запросов одновременно уходят в базу за одним значением. Какие приёмы защищают от этого? Middle
- Что делать с горячими ключами, на которые приходится непропорционально большая нагрузка? Senior
- Как оценить, насколько кэш разгружает базу, и что будет, если он упадёт? Middle
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.