CacheTagHelper

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

Последнее обновление: 06.12.2019

CacheTagHelper обертывает контент представления и позволяет кэшировать его в памяти сервера. Он использует тег <cache>, и весь контент, определенный внутри этого тега, кэшируется в памяти. Перед кэшированием тег-хелпер проверяет, сохранен ли уже данный контент в MemoryCache. Если контент имеется в кэше, тогда движку Razor посылается контент из кэша. Если же данного контента не оказывается в кэше, тогда Razor обрабатывает контент, а тег-хелпер сохраняет контент в memory cache для последующего использования.

Например, пусть у нас есть частичное представление TimeView.cshtml, которое просто выводит текущее время:

<p>Время из DateView: <b>@DateTime.Now.ToString("HH:mm:ss")</b></p>

Пусть оно подключается в какое-нибудь другое представление, например, в Index.cshtml:

<p>Время из Index: <b>@DateTime.Now.ToString("HH:mm:ss")</b></p>
<cache>
 @await Html.PartialAsync("TimeView")
</cache>

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

И если в течение короткого времени (20 минут) мы несколько раз обратимся к приложению, то увидим, что время из частичного представления застыло и не изменяется:

CacheTagHelper in ASP.NET Core MVC

Рассмотрим атрибуты, которые использует данный тег.

expires-after

expires-after указывает, на какое время контент будет кэшироваться. В качестве значения атрибут принимает объект TimeSpan:

<cache expires-after="@TimeSpan.FromMinutes(10)">  
    @await Html.PartialAsync("TimeView")
</cache>  

В данном случае контент кэшируется на 10 минут.

expires-on

expires-on указывает, когда именно истечет срок хранения контента в кэше. В качестве значения атрибут принимает объект DateTime:

<cache expires-on="@DateTime.Now.AddDays(1)">  
    @await Html.PartialAsync("TimeView")
</cache>  

Здесь срок кэширования истекает через день.

expires-sliding

expires-sliding определяет, через какое время с момента последнего посещения контент будет удаляться из кэша. В качестве значения атрибут принимает объект TimeSpan:

<cache expires-sliding="@TimeSpan.FromMinutes(10)">  
    @await Html.PartialAsync("TimeView")
</cache>  

vary-by-user

vary-by-user позволяет кэшировать контент отдельно для каждого залогиненного пользователя (для которого установлено значение User.Identity.Name). При кэшировании к ключу контента в кэше добавляется логин пользователя. В качестве значения атрибут принимает логическое значение true (надо кэшировать по пользователю) или false:

<cache expires-after="@TimeSpan.FromMinutes(15)" vary-by-user="true">  

</cache>  

vary-by-route

Данный атрибут позволяет кэшировать различные версии одного и того же контента в зависимости от параметров маршрута. В качестве значения атрибут принимает названия параметров через запятую, которые будут учитываться при кэшировании. И затем в кэше для контента к ключу будет добавляться значение параметров:

<cache expires-after="@TimeSpan.FromMinutes(15)" vary-by-route="id">  

</cache>  

В данном случае будут создаваться разные версии одного и того же контента для разных значений параметра id.

vary-by-query

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

<cache vary-by-query="name">  

</cache>  

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

vary-by-cookie

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

<cache vary-by-cookie="pubid">  

</cache>  

Здесь предполагается, что наше приложение использует куку "pubid". И для каждого ее значения будут кэшироваться свои копии контента.

vary-by-header

vary-by-header позволяет кэшировать различные версии контента в зависимости от значений заголовков запроса. В качестве значения атрибуту передается название заголовка запроса. Например, для кэширования разных версий контента для разных браузеров может использоваться заголовок User-Agent:

<cache vary-by-header="User-Agent">  

</cache>  

vary-by

vary-by позволяет кэшировать различные версии контента в зависимости от произвольного строкового значения. Например, кэшируем в зависимости от значения ViewBag.Id:

<cache vary-by="@ViewBag.Id">  

</cache>  

priority

Определяет приоритет кэшируемого контента. Приоритет может иметь значение, если для размещения кэша не хватает памяти. В этом случае из кэша могут удаляться некоторые объекты. И чем ниже приоритет, тем больше вероятность что данные объекты будут удалены при нехватке памяти.

Атрибут priority принимает одно из значений перечисления Microsoft.Extensions.Caching.Memory.CacheItemPriority:

  • Low: низкий приоритет

  • High: высокий приоритет

  • NeverRemove: контент никогда не удаляется из кэша

  • Normal: средний приоритет

Например:

<cache vary-by-user="true" 
       priority="@Microsoft.Extensions.Caching.Memory.CacheItemPriority.Normal">
</cache>
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850