Популярная запись исчезла из кеша. Сто запросов одновременно увидели промах и пошли за ней в базу. Кеш есть, а нагрузка всё равно прилетела залпом — это cache stampede.
HybridCache умеет объединять конкурентные обращения за одним ключом: один вызов получает данные, остальные ждут его результат.
var product = await cache.GetOrCreateAsync(
$"product:{id}",
async token => await repository.LoadAsync(id, token),
cancellationToken: cancellationToken);
Для регистрации нужен пакет Microsoft.Extensions.Caching.Hybrid и вызов
builder.Services.AddHybridCache();. Без Redis тоже работают локальный кеш и защита от такого залпа.⏬ Важная граница
Объединение запросов действует внутри одного экземпляра HybridCache. Два сервера могут одновременно обратиться к базе, даже если используют общий Redis. Это полезная защита локального кеша, но не распределённая блокировка на весь кластер.
🔗 Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#il_люминатор