Одновременное истечение ключей кэша кладёт базу
Каталог товаров кэшируется в Redis с TTL 10 минут. Кэш прогревается при старте, поэтому у большинства ключей время жизни истекает почти одновременно. Нагрузка — около 1500 rps.
Каждые десять минут наблюдается одна и та же картина: всплеск времени ответа до нескольких секунд, скачок числа подключений к базе, часть запросов отваливается по таймауту. После прогрева всё нормализуется.
В чём причина и что делать?
- Redis не выдерживает такую нагрузку — нужно масштабировать сам кэш, добавив реплики
- Нужно вернуться на локальный IMemoryCache: тогда обращений по сети не будет, всплески исчезнут и база перестанет получать пиковую нагрузку
- Это лавина промахов: помогают разброс TTL, ограничение одновременной перегенерации одного ключа и фоновое обновление до истечения
- Нужно вернуться на локальный IMemoryCache: тогда обращений по сети не будет и всплески исчезнут
