.NET Core 响应缓存实现详解

发布:2024-09-23 10:41 阅读:79 点赞:0

一. 引言

响应缓存是浏览器或其他客户端缓存服务器响应的过程。这种机制可以加快对相同资源后续请求的处理速度,同时减少服务器重复处理相同响应的负担。

二. 响应缓存配置

ASP.NET Core 使用 ResponseCache 特性设置响应缓存头。同时,我们还可以利用响应缓存中间件从服务器端管理缓存行为。一旦设置完毕,客户端和其他代理可以读取这些缓存头,以确定如何缓存服务器响应。

1. 缓存配置示例

以下是在 Program 类中定义缓存配置的示例:

builder.Services.AddControllers(options =>
{
    options.CacheProfiles.Add("Default"new CacheProfile
    {
        Duration = 60,
        Location = ResponseCacheLocation.Any
    });
});

上述代码定义了一个名为“Default”的缓存配置,位置设置为公共,持续时间为60秒。

三. 应用缓存配置

我们可以将缓存配置应用于任意控制器或端点:

[HttpGet("default")]
[ResponseCache(CacheProfileName = "Default")]
public IActionResult Default()
{
    return Ok($"Default response was generated, {DateTime.Now}");
}

以上代码将默认的缓存控制设置应用于响应,结果为:cache-control: public,max-age=60

四. 通过配置文件管理缓存配置

我们可以在应用程序设置文件中定义多个缓存配置,避免在 Program 类中硬编码缓存设置。

"CacheProfiles": {
  "Cache5Mins": {
    "Duration"600,
    "Location""Any"
  },
  "CacheVaryByHeader": {
    "Duration"60,
    "Location""Any",
    "VaryByHeader""User-Agent"
  }
}

以上 JSON 定义了两个缓存配置:一个持续时间为600秒,另一个根据 User-Agent 头变化。

1. 读取配置示例

在 Program 类中使用 ConfigurationManager 类读取这些配置:

builder.Services.AddControllers(options =>
{
    var cacheProfiles = builder.Configuration
            .GetSection("CacheProfiles")
            .GetChildren();

    foreach (var cacheProfile in cacheProfiles)
    {
        options.CacheProfiles
        .Add(cacheProfile.Key, cacheProfile.Get<CacheProfile>());
    }
});

此方法可在应用程序中灵活地定义多个缓存配置。

五. 验证缓存响应

运行应用程序并验证响应缓存,确保配置生效。

缓存

1. 缓存验证示例

网址

上面的截图是默认响应缓存配置文件;默认值为 60(1 分钟),直到该响应相同;在该持续时间之后,响应会发生变化。

缓存配置文件

上面的截图是针对缓存因标头响应缓存配置文件而变化的;默认值为 60(1 分钟),并且因标头属性值而异的是 User-Agent,直到该响应相同;在该持续时间之后,响应会发生变化。

六. 注意事项

虽然响应缓存能显著提升应用性能,但在某些情况下可能不适合使用。例如,当内容频繁变化或服务用户特定数据时,缓存可能导致不正确或不理想的行为。