TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #1864 1.38K
День 1522. #ЗаметкиНаПолях
Кэширование Вывода в
ASP.NET Core. Окончание
Начало
Продолжение

Удаление кэша
Представим, что данные, которые мы кэшируем, изменились. Здесь у нас два варианта:
- убедиться, что клиенты понимают, что данные могут устареть после определённого периода;
- обновить кэш, удалив элементы.
Первое обычно подходит для коротких периодов кэширования (как в нашей текущей конфигурации), но не для более длительных периодов кэширования.

Добавим ещё одну конечную точку:
[HttpGet("database")]
[OutputCache(PolicyName = "Expensive")]
public string GetDatabase()
=> $"Дорогой вызов БД в: {DateTime.Now:hh:mm:ss}";

И политику (для этой политики добавим тэг tag-expensive:
opt.AddPolicy("Expensive", с =>
с.Expire(TimeSpan.FromMinutes(1))
.Tag("tag-expensive"));

Также добавим тег tag-all в политику по умолчанию:
opt.AddBasePolicy(с =>
с.Expire(TimeSpan.FromSeconds(5))
.Tag("tag-all"));

Для конечной точки /database ответ находится в кэше 1 минуту. Если данные изменились, клиенты всё равно в течение минуты будут получать старые кэшированные значения. Однако мы можем удалить их, используя только что настроенные теги.

Добавим сервисную конечную точку:
[HttpDelete("cache/{tag}")]
public async Task DeleteCache(
IOutputCacheStore cache, string tag)
=> await cache.EvictByTagAsync(tag, default);

Она принимает специальную зависимость IOutputCacheStore и вызывает метод EvictByTagAsync, передавая значение тега из URL. Это удаляет из кэша элементы, соответствующие этому тегу.

Итак, давайте проверим результаты. Используя утилиту, вроде Postman, вызовем сервисную конечную точку:
DELETE …/cache/tag-expensive
Теперь кэш для конечных точек с политикой Expensive очищен.

DELETE …/cache/tag-all
Теперь кэш для конечных точек с политикой по умолчанию очищен.

Это очень мощный инструмент, позволяющий обновлять кэш, когда данные устаревают, а не только по истечении срока кэширования. В нашем случае мы предоставляем эту функциональность через конечную точку, но это не лучшая практика, поскольку мы не должны позволять клиентам очищать кэш. Лучшим решением будет вызов метода EvictByTagAsync во время операции сохранения в БД данных, которые потом будут извлекаться и кэшироваться.

Итого
В этой серии мы обсудили, как настроить OutputCache в ASP.NET. Для большинства сценариев мы использовали значения по умолчанию, включая использование кэша в памяти в качестве хранилища. Однако по мере роста размера приложения и добавления серверов этот вариант становится менее предпочтительным. Есть варианты лучше, включая такой инструмент, как Redis.

Источник: https://code-maze.com/aspnet-core-output-caching/
  • 👍 12
More from @netdeveloperdiary
  1. Oct 12, 2026День 2812. #Карьера #AI Как Разработчикам Оставаться Полезными, Когда Код Пишет ИИ? По мер…
  2. Oct 11, 2026День 2811. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  3. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
  4. Oct 9, 2026День 2809. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Окончание Начало 3.…
  5. Oct 8, 2026День 2808. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Начало В ИТ есть се…
  6. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →