Объединяйте одновременные загрузки одного ключа, распределяйте истечение TTL и при допустимости отдавайте старое значение во время обновления.
Как избегать cache stampede, когда много клиентов одновременно запрашивают ключ после истечения кэша?
Объединяйте одновременные загрузки одного ключа, распределяйте истечение TTL и при допустимости отдавайте старое значение во время обновления.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Объединяйте одновременные загрузки одного ключа, распределяйте истечение TTL и при допустимости отдавайте старое значение во время обновления.
Singleflight помогает внутри процесса; между репликами может потребоваться координация с ограниченным lease. Добавьте jitter к TTL и ограничьте нагрузку на источник данных. Не держите блокировку бесконечно и определите поведение при ошибке обновления. Для чувствительных или быстро отзываемых данных stale-ответ может быть недопустим, поэтому политика зависит от контракта.