Вспомогательная функция тегов кэша в MVC-моделях ASP.NET Core

Автор: Питер Кельнер (Peter Kellner)

Вспомогательная функция тегов кэша позволяет повысить производительность приложения ASP.NET Core за счет кэширования его содержимого во внутренний поставщик кэша ASP.NET Core.

Общие сведения о вспомогательных функциях тегов см. в разделе Вспомогательные функции тегов в ASP.NET Core.

Razor Следующая разметка кэширует текущую дату:

<cache>@DateTime.Now</cache>

Первый запрос к странице, содержащей вспомогательную функцию тегов, отобразит текущую дату. Последующие запросы будут показывать кэшированное значение, пока срок действия кэша не истечет (по умолчанию — 20 минут) или пока кэшированная дата не будет удалена из кэша.

Атрибуты вспомогательной функции тегов кэша

включена

Тип атрибута Примеры По умолчанию
Логическое значение true, false true

enabled определяет, кэшируется ли содержимое, охватываемое вспомогательной функцией тегов кэша. Значение по умолчанию — true. Если установлено значение false, выводимые данные не кэшируются.

Пример:

<cache enabled="true">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

expires-on

Тип атрибута Пример
DateTimeOffset @new DateTime(2025,1,29,17,02,0)

expires-on задает абсолютную дату окончания срока действия для элемента кэша.

В следующем примере содержимое вспомогательной функции тегов кэша будет кэшировано до 29 января 2025 г., 17:02:

<cache expires-on="@new DateTime(2025,1,29,17,02,0)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

expires-after

Тип атрибута Пример По умолчанию
TimeSpan @TimeSpan.FromSeconds(120) 20 минут.

expires-after задает интервал времени для кэширования содержимого с момента первого запроса.

Пример:

<cache expires-after="@TimeSpan.FromSeconds(120)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

Модуль Razor представления задает значение по умолчанию expires-after 20 минут.

expires-sliding

Тип атрибута Пример
TimeSpan @TimeSpan.FromSeconds(60)

Задает время, по истечении которого запись кэша следует удалить, если к ней не было обращений.

Пример:

<cache expires-sliding="@TimeSpan.FromSeconds(60)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-header

Тип атрибута Примеры
Строка User-Agent, User-Agent,content-encoding

vary-by-header принимает список разделенных запятыми значений заголовков, запускающих обновление кэша при их изменении.

Следующий пример показывает отслеживание значения заголовка User-Agent. Содержимое будет кэшироваться для каждого отдельного заголовка User-Agent, представленного на веб-сервере:

<cache vary-by-header="User-Agent">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-query

Тип атрибута Примеры
Строка Make, Make,Model

vary-by-query принимает список разделенных запятыми Keys в строке запроса (Query), запускающих обновление кэша при изменении значения любого указанного ключа.

Следующий пример показывает отслеживание значений Make и Model. Содержимое будет кэшироваться для каждого отдельного заголовка Make и Model, представленного на веб-сервере:

<cache vary-by-query="Make,Model">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-route

Тип атрибута Примеры
Строка Make, Make,Model

vary-by-route принимает список разделенных запятыми имен параметров маршрута, запускающих обновление кэша при изменении значения параметра данных маршрута.

Пример:

Startup.cs:

routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}/{Make?}/{Model?}");

Index.cshtml:

<cache vary-by-route="Make,Model">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
Тип атрибута Примеры
Строка .AspNetCore.Identity.Application, .AspNetCore.Identity.Application,HairColor

vary-by-cookie принимает список cookie имен с разделителями-запятыми, которые активируют обновление кэша при изменении значений cookie .

В следующем примере отслеживается связанный cookie с ASP.NET Core Identity. При проверке подлинности пользователя изменение Identitycookie в кэше активирует обновление кэша:

<cache vary-by-cookie=".AspNetCore.Identity.Application">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-user

Тип атрибута Примеры По умолчанию
Логическое значение true, false true

vary-by-user указывает, следует ли сбрасывать кэш при изменении вошедшего в систему пользователя (или участника контекста). Текущий пользователь также называется субъектом контекста запроса и может просматриваться в Razor представлении, ссылаясь @User.Identity.Name.

В следующем примере отслеживается текущий вошедший пользователь для активации обновления кэша:

<cache vary-by-user="true">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

При использовании этого атрибута содержимое сохраняется в кэше в течение цикла входа и выхода. Если присвоено значение true, цикл проверки подлинности делает недействительным кэш для прошедшего проверку подлинности пользователя. Кэш недопустим, так как при проверке подлинности пользователя создается новое уникальное cookie значение. Кэш сохраняется для анонимного состояния, если срок действия отсутствует cookie или cookie истек. Если пользователь не прошел проверку подлинности, кэш сохраняется.

vary-by

Тип атрибута Пример
Строка @Model

vary-by позволяет настраивать, какие данные кэшируются. Содержимое вспомогательной функции тегов кэша обновляется при изменении объекта, на который ссылается строковое значение атрибута. Часто этому атрибуту назначается объединенная строка значений модели. По сути, это приводит к ситуации, когда обновление любого из объединенных значений приводит к сбросу кэша.

В следующем примере предполагается, что метод контроллера, визуализирующий представление, суммирует целочисленные значения двух параметров маршрута (myParam1 и myParam2) и возвращает сумму как одно свойство модели. При изменении этой суммы содержимое вспомогательной функции тегов кэша визуализируется и кэшируется заново.

Действие:

public IActionResult Index(string myParam1, string myParam2, string myParam3)
{
    int num1;
    int num2;
    int.TryParse(myParam1, out num1);
    int.TryParse(myParam2, out num2);
    return View(viewName, num1 + num2);
}

Index.cshtml:

<cache vary-by="@Model">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

priority

Тип атрибута Примеры По умолчанию
CacheItemPriority High, Low, NeverRemove, Normal Normal

priority предоставляет встроенному поставщику кэша инструкции по удалению кэша. При нехватке памяти веб-сервер будет первыми удалять записи кэша с приоритетом Low.

Пример:

<cache priority="High">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

Атрибут priority не гарантирует определенный уровень периода удержания кэша. CacheItemPriority носит лишь рекомендательный характер. Установка для этого атрибута значения NeverRemove не гарантирует постоянное хранение элементов кэша. Дополнительные сведения см. в разделе Дополнительные ресурсы.

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

Дополнительные ресурсы