Основы кэширования результатов
Кэшируйте ответы, чтобы сократить объём работы.
«Основы кэширования результатов» — бесплатный урок 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 headersAddOutputCache
Зарегистрируйте службу с помощью 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 — локальная установка не требуется.
Все уроки этого курса
- Алгоритмы ограничения частоты запросов
- Настройка промежуточного ПО ограничения частоты запросов
- Основы кэширования результатов
- Политики кэша и его аннулирование