0Pricing
C# Academy · Урок

Основы кэширования результатов

Кэшируйте ответы, чтобы сократить объём работы.

«Основы кэширования результатов» — бесплатный урок C# Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.

Что такое кэширование результатов

Кэширование результатов сохраняет полный HTTP-ответ конечной точки, поэтому повторные запросы обслуживаются из кэша без повторного выполнения обработчика. Это значительно снижает задержку и нагрузку для конечных точек, предназначенных преимущественно для чтения.

// First call -> handler runs, response stored
// Next calls -> response served from cache

Кэширование результатов и кэширование ответов

Встроенное кэширование результатов (добавленное в .NET 7) сохраняет ответы на сервере, и Вы полностью им управляете. Более старое кэширование ответов только отправляет HTTP-заголовки кэша и полагается на клиента или прокси, которые должны учитывать эти заголовки.

// Output caching: server-side store you control
// Response caching: just Cache-Control headers

AddOutputCache

Зарегистрируйте службу с помощью AddOutputCache.

builder.Services.AddOutputCache();

UseOutputCache

Добавьте промежуточное ПО в конвейер с помощью UseOutputCache. Разместите его после маршрутизации и, если оно используется, после CORS.

var app = builder.Build();

app.UseOutputCache();

app.MapControllers();

CacheOutput для конечной точки

Включите кэширование для конечной точки с помощью CacheOutput (минимальный API) или атрибута [OutputCache] (контроллеры).

app.MapGet("/products", GetProducts)
   .CacheOutput();

// Controller:
// [OutputCache]
// public IActionResult Get() => Ok(...);

Настройка срока действия

Управляйте продолжительностью хранения ответа в кэше с помощью Expire.

app.MapGet("/products", GetProducts)
   .CacheOutput(policy => policy.Expire(TimeSpan.FromSeconds(30)));

Что кэшируется

По умолчанию кэшируются только запросы GET и HEAD со статусом 200 и только при отсутствии Set-Cookie и авторизации — случайное кэширование аутентифицированных ответов, зависящих от пользователя, опасно.

// Cached by default: GET/HEAD, 200, no cookies/auth

Разделение по строке запроса

Два запроса к одному пути с разными строками запроса обычно следует кэшировать отдельно. Используйте SetVaryByQuery.

app.MapGet("/search", Search)
   .CacheOutput(policy => policy
        .Expire(TimeSpan.FromSeconds(60))
        .SetVaryByQuery("q", "page"));

Разделение по заголовку

Вы можете включить заголовки в ключ кэша — например, чтобы выдавать отдельную кэшированную копию per Accept-Language.

policy.SetVaryByHeader("Accept-Language");

Базовая политика для всего

AddBasePolicy применяет значение по умолчанию ко всем конечным точкам, но отдельные конечные точки по-прежнему могут его переопределить.

builder.Services.AddOutputCache(options =>
{
    options.AddBasePolicy(policy =>
        policy.Expire(TimeSpan.FromSeconds(10)));
});

Отключение для конечной точки

Если базовая политика кэширует всё, исключите динамические конечные точки с помощью NoCache.

app.MapGet("/cart", GetCart)
   .CacheOutput(policy => policy.NoCache());

Быстрая проверка

Проверьте, понимаете ли Вы различие между двумя возможностями кэширования.

Итоги

Вы изучили основы кэширования результатов:

  • AddOutputCache + UseOutputCache включают кэширование на стороне сервера.
  • CacheOutput / [OutputCache] подключают конечные точки к кэшированию; Expire задаёт его продолжительность.
  • По умолчанию кэшируются только ответы GET/HEAD со статусом 200 без авторизации и файлов cookie.
  • SetVaryByQuery и SetVaryByHeader формируют ключ кэша.

Далее: политики кэширования и удаление записей.

Часто задаваемые вопросы

Урок «Основы кэширования результатов» бесплатный?

Да — полный текст урока «Основы кэширования результатов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.

Чему я научусь в уроке «Основы кэширования результатов»?

Кэшируйте ответы, чтобы сократить объём работы. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Основы кэширования результатов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Алгоритмы ограничения частоты запросов
  2. Настройка промежуточного ПО ограничения частоты запросов
  3. Основы кэширования результатов
  4. Политики кэша и его аннулирование
← Назад к C# Academy