ASP.NET Core MVC 中的缓存标记帮助程序

彼得·凯尔纳

缓存标签助手通过将 ASP.NET Core 应用的内容缓存到 ASP.NET Core 内部缓存提供程序,从而提高应用的性能。

有关标记帮助程序概述,请参阅 ASP.NET Core 中的标记帮助程序。

以下 Razor 标记缓存当前日期:

<cache>@DateTime.Now</cache>

对包含标记帮助程序的页面的第一个请求将显示当前日期。 其他请求显示缓存值,直到缓存过期(默认 20 分钟)或缓存日期从缓存中逐出为止。

缓存标记帮助程序属性

expires-after

属性类型 Example 违约
TimeSpan @TimeSpan.FromSeconds(120)

expires-after 设置从第一个请求时间开始缓存内容的时长。

示例:

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

enabled

属性类型 例子 违约
布尔 truefalse true

enabled 确定缓存标记帮助程序包含的内容是否已缓存。 默认值为 true。 如果将其设置为 false,则 呈现的输出不 会被缓存。

示例:

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

expires-on

属性类型 Example
DateTimeOffset @new DateTime(2025,1,29,17,02,0)

expires-on 设置缓存项的绝对到期日期。

以下示例将缓存标记帮助程序的内容缓存到 2025 年 1 月 29 日下午 5:02:

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

expires-sliding

属性类型 Example
TimeSpan @TimeSpan.FromSeconds(60)

设置缓存项在其值未被访问时应逐出的时间。

示例:

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

如果 expires-afterexpires-on 都未定义,则默认值为 30 秒。

priority

属性类型 例子 违约
CacheItemPriority HighLowNeverRemoveNormal Normal

priority 提供内置缓存提供程序的缓存逐出指南。 Web 服务器在内存压力下时先逐出 Low 缓存条目。

示例:

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

priority 属性不保证缓存保留的特定级别。 CacheItemPriority 只是建议。 将此属性设置为 NeverRemove 不保证始终保留缓存的项。 有关详细信息,请参阅 “其他资源 ”部分中的主题。

缓存标记帮助程序依赖于 内存缓存服务。 如果服务尚未被添加,缓存标记帮助程序会添加该服务。

vary-by

属性类型 Example
String @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>
属性类型 例子
String .AspNetCore.Identity.Application.AspNetCore.Identity.Application,HairColor

vary-by-cookie 接受以逗号分隔的名称列表 cookie ,这些名称在值更改时 cookie 触发缓存刷新。

以下示例监视与 ASP.NET Core cookie 相关联的 Identity。 对用户进行身份验证时, Identitycookie 更改会触发缓存刷新:

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

vary-by-culture

属性类型 例子 违约
布尔 truefalse false

vary-by-culture 根据请求的文化区分缓存的结果。 将属性设置为true表示结果因CultureInfo.CurrentCultureCultureInfo.CurrentUICulture而异。

示例:

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

vary-by-header

属性类型 例子
String User-AgentUser-Agent,content-encoding

vary-by-header 接受以逗号分隔的标头值列表,这些值在更改时触发缓存刷新。

以下示例监视标头值 User-Agent。 该示例对提供给 Web 服务器的每个不同 User-Agent 的内容进行缓存。

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

vary-by-query

属性类型 例子
String MakeMake,Model

vary-by-query接受查询字符串 () 中以逗号分隔的列表,Keys当任何列出的键的值发生更改时,该列表Query将触发缓存刷新。

以下示例监视值 MakeModel。 示例会为呈现给 Web 服务器的每个不同的 MakeModel 内容进行缓存。

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

vary-by-route

属性类型 例子
String MakeMake,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>

vary-by-user

属性类型 例子 违约
布尔 truefalse false

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 已过期时,缓存将保留为匿名状态。 如果未 对用户 进行身份验证,则保留缓存。

其他资源