Если ваш дашборд каждый раз агрегирует данные из нескольких таблиц, а список сотрудников делает новый запрос к БД при каждой загрузке — с десятью пользователями это терпимо. Под реальной нагрузкой всё рассыпается.
EasyCaching решает эту проблему — чистый кэширующий слой, который встраивается в .NET.
Что даёт интеграция:
• Провайдер, TTL и ключи живут в appsettings.json.
Пример:
"PerEndpoint": {
"Dashboard:Metrics": { "AbsoluteTtlSeconds": 300 },
"Employees:GetAll": { "AbsoluteTtlSeconds": 300, "SlidingTtlSeconds": 120 }
}• MediatR Pipeline: кэш оборачивает query-хендлер прозрачно. Хэндлер вообще не знает, что его результаты кэшируются.
var cached = await _cache.GetAsync<TResponse>(cacheKey);
if (cached != null) return cached;
var result = await next(); // реальный запрос к БД
await _cache.SetAsync(cacheKey, result, CacheKeyPrefixes.EmployeesAll);
return result;
• Domain Events инвалидация: CacheInvalidationEventHandler автоматически сбрасывает кэш при любой записи. RemoveByPrefixAsync чистит все Employees:GetAll:* за раз, без перебора ключей.
• Диагностические заголовки X-Cache-Status: HIT/MISS в каждом ответе. Видно прямо в DevTools — кэш работает или нет.
• Админские эндпоинты:
POST /cache/invalidate и GET /cache/stats для ручного управленияКэширование — это инфраструктура, не бизнес-логика. Хендлеры не знают о кэше, команды не знают об инвалидации.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view