Используйте single-flight или блокировку по ключу: одно выполнение обновляет кеш, остальные ждут либо получают допустимое устаревшее значение. Повторно проверьте кеш после получения блокировки.
Как избежать ситуации, когда после истечения или отсутствия записи в кэше множество запросов одновременно запускают дорогое вычисление и создают высокую нагрузку на сервер?
Используйте single-flight или блокировку по ключу: одно выполнение обновляет кеш, остальные ждут либо получают допустимое устаревшее значение. Повторно проверьте кеш после получения блокировки.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Используйте single-flight или блокировку по ключу: одно выполнение обновляет кеш, остальные ждут либо получают допустимое устаревшее значение. Повторно проверьте кеш после получения блокировки.
Добавьте jitter к TTL, ограничение ожидания и безопасное освобождение lock владельцем. Между процессами локальный mutex не достаточен; распределённая блокировка требует lease и защиты от поздней записи. Stale-while-revalidate подходит лишь там, где устаревание допустимо. Не превращайте один глобальный lock в узкое место для всех ключей.