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

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

Вспомогательная функция тегов кэша позволяет повысить производительность приложения ASP.NET Core за счет кэширования его содержимого во внутренний поставщик кэша ASP.NET Core.The Cache Tag Helper provides the ability to improve the performance of your ASP.NET Core app by caching its content to the internal ASP.NET Core cache provider.

Общие сведения о вспомогательных функциях тегов см. здесь: Вспомогательные функции тегов в ASP.NET Core.For an overview of Tag Helpers, see Вспомогательные функции тегов в ASP.NET Core.

Приведенная ниже разметка Razor кэширует текущую дату:The following Razor markup caches the current date:

<cache>@DateTime.Now</cache>

Первый запрос к странице, содержащей вспомогательную функцию тегов, отобразит текущую дату.The first request to the page that contains the Tag Helper displays the current date. Последующие запросы будут показывать кэшированное значение, пока срок действия кэша не истечет (по умолчанию — 20 минут) или пока кэшированная дата не будет удалена из кэша.Additional requests show the cached value until the cache expires (default 20 minutes) or until the cached date is evicted from the cache.

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

Включеноenabled

Тип атрибутаAttribute Type ПримерыExamples Значение по умолчаниюDefault
логическийBoolean true, falsetrue, false true

enabled определяет, кэшируется ли содержимое, охватываемое вспомогательной функцией тегов кэша.enabled determines if the content enclosed by the Cache Tag Helper is cached. Значение по умолчанию — true.The default is true. Если установлено значение false, выводимые данные не кэшируются.If set to false, the rendered output is not cached.

Пример.Example:

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

expires-onexpires-on

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

expires-on задает абсолютную дату окончания срока действия для элемента кэша.expires-on sets an absolute expiration date for the cached item.

В следующем примере содержимое вспомогательной функции тегов кэша будет кэшировано до 29 января 2025 г., 17:02:The following example caches the contents of the Cache Tag Helper until 5:02 PM on January 29, 2025:

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

expires-afterexpires-after

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

expires-after задает интервал времени для кэширования содержимого с момента первого запроса.expires-after sets the length of time from the first request time to cache the contents.

Пример.Example:

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

Модуль представлений Razor задает для expires-after значение по умолчанию 20 минут.The Razor View Engine sets the default expires-after value to twenty minutes.

expires-slidingexpires-sliding

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

Задает время, по истечении которого запись кэша следует удалить, если к ней не было обращений.Sets the time that a cache entry should be evicted if its value hasn't been accessed.

Пример.Example:

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

vary-by-headervary-by-header

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

vary-by-header принимает список разделенных запятыми значений заголовков, запускающих обновление кэша при их изменении.vary-by-header accepts a comma-delimited list of header values that trigger a cache refresh when they change.

Следующий пример показывает отслеживание значения заголовка User-Agent.The following example monitors the header value User-Agent. Содержимое будет кэшироваться для каждого отдельного заголовка User-Agent, представленного на веб-сервере:The example caches the content for every different User-Agent presented to the web server:

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

vary-by-queryvary-by-query

Тип атрибутаAttribute Type ПримерыExamples
СтрокаString Make, Make,ModelMake, Make,Model

vary-by-query принимает список разделенных запятыми Keys в строке запроса (Query), запускающих обновление кэша при изменении значения любого указанного ключа.vary-by-query accepts a comma-delimited list of Keys in a query string (Query) that trigger a cache refresh when the value of any listed key changes.

Следующий пример показывает отслеживание значений Make и Model.The following example monitors the values of Make and Model. Содержимое будет кэшироваться для каждого отдельного заголовка Make и Model, представленного на веб-сервере:The example caches the content for every different Make and Model presented to the web server:

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

vary-by-routevary-by-route

Тип атрибутаAttribute Type ПримерыExamples
СтрокаString Make, Make,ModelMake, Make,Model

vary-by-route принимает список разделенных запятыми имен параметров маршрута, запускающих обновление кэша при изменении значения параметра данных маршрута.vary-by-route accepts a comma-delimited list of route parameter names that trigger a cache refresh when the route data parameter value changes.

Пример.Example:

Startup.CS:Startup.cs:

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

Index. cshtml:Index.cshtml:

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

vary-by-cookie принимает список разделенных запятыми имен cookie, запускающих обновление кэша при изменении их значений.vary-by-cookie accepts a comma-delimited list of cookie names that trigger a cache refresh when the cookie values change.

Следующий пример отслеживает файл cookie, связанный с удостоверением ASP.NET Core.The following example monitors the cookie associated with ASP.NET Core Identity. При проверке подлинности пользователя изменения в файле cookie удостоверений инициирует обновление кэша:When a user is authenticated, a change in the Identity cookie triggers a cache refresh:

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

vary-by-uservary-by-user

Тип атрибутаAttribute Type ПримерыExamples Значение по умолчаниюDefault
логическийBoolean true, falsetrue, false true

vary-by-user указывает, следует ли сбрасывать кэш при изменении вошедшего в систему пользователя (или участника контекста).vary-by-user specifies whether or not the cache resets when the signed-in user (or Context Principal) changes. Текущий пользователь также называется участником контекста запроса и доступен для просмотра в представлении Razor с помощью ссылки на @User.Identity.Name.The current user is also known as the Request Context Principal and can be viewed in a Razor view by referencing @User.Identity.Name.

В следующем примере отслеживается текущий вошедший пользователь для активации обновления кэша:The following example monitors the current logged in user to trigger a cache refresh:

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

При использовании этого атрибута содержимое сохраняется в кэше в течение цикла входа и выхода.Using this attribute maintains the contents in cache through a sign-in and sign-out cycle. Если присвоено значение true, цикл проверки подлинности делает недействительным кэш для прошедшего проверку подлинности пользователя.When the value is set to true, an authentication cycle invalidates the cache for the authenticated user. Кэш становится недействительным, так как при проверке подлинности создается уникальное значение файла cookie.The cache is invalidated because a new unique cookie value is generated when a user is authenticated. Кэш сохраняется в состоянии анонимности, когда значение cookie не существует или срок его действия истек.Cache is maintained for the anonymous state when no cookie is present or the cookie has expired. Если пользователь не прошел проверку подлинности, кэш сохраняется.If the user is not authenticated, the cache is maintained.

vary-byvary-by

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

vary-by позволяет настраивать, какие данные кэшируются.vary-by allows for customization of what data is cached. Содержимое вспомогательной функции тегов кэша обновляется при изменении объекта, на который ссылается строковое значение атрибута.When the object referenced by the attribute's string value changes, the content of the Cache Tag Helper is updated. Часто этому атрибуту назначается объединенная строка значений модели.Often, a string-concatenation of model values are assigned to this attribute. По сути, это приводит к ситуации, когда обновление любого из объединенных значений приводит к сбросу кэша.Effectively, this results in a scenario where an update to any of the concatenated values invalidates the cache.

В следующем примере предполагается, что метод контроллера, визуализирующий представление, суммирует целочисленные значения двух параметров маршрута (myParam1 и myParam2) и возвращает сумму как одно свойство модели.The following example assumes the controller method rendering the view sums the integer value of the two route parameters, myParam1 and myParam2, and returns the sum as the single model property. При изменении этой суммы содержимое вспомогательной функции тегов кэша визуализируется и кэшируется заново.When this sum changes, the content of the Cache Tag Helper is rendered and cached again.

Действие:Action:

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:Index.cshtml:

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

prioritypriority

Тип атрибутаAttribute Type ПримерыExamples Значение по умолчаниюDefault
CacheItemPriority High, Low, NeverRemove, NormalHigh, Low, NeverRemove, Normal Normal

priority предоставляет встроенному поставщику кэша инструкции по удалению кэша.priority provides cache eviction guidance to the built-in cache provider. При нехватке памяти веб-сервер будет первыми удалять записи кэша с приоритетом Low.The web server evicts Low cache entries first when it's under memory pressure.

Пример.Example:

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

Атрибут priority не гарантирует определенный уровень периода удержания кэша.The priority attribute doesn't guarantee a specific level of cache retention. CacheItemPriority носит лишь рекомендательный характер.CacheItemPriority is only a suggestion. Установка для этого атрибута значения NeverRemove не гарантирует постоянное хранение элементов кэша.Setting this attribute to NeverRemove doesn't guarantee that cached items are always retained. Дополнительные сведения см. в разделе Дополнительные ресурсы.See the topics in the Additional Resources section for more information.

Вспомогательная функция тегов кэша зависит от службы кэширования в памяти.The Cache Tag Helper is dependent on the memory cache service. Вспомогательная функция тегов кэша добавляет эту службу, если она не добавлена.The Cache Tag Helper adds the service if it hasn't been added.

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