当初越来越多的开发人员抉择 ASP.Net Core 构建高性能,现代化 web 程序,并跑在 Windows,Linux 和 MacOS 上,而高性能的一大课题就是缓存,尽管 ASP.Net Core 中并没有内建缓存对象,但能够利用 Nuget 的外接扩大实现如下三种缓存形式。
- In-memory caching
- distributed caching
- response caching
在后面的文章中探讨过如何在 ASP.Net Core 中实现内存缓存 和 分布式缓存,在这篇文章中,我将会解释 Response Cache 及它的益处,而后再来看一下如何在 ASP.Net Core 中集成 response cache
中间件。
Response Cache
Response Cache 原理就是在 Http Response Header
中设置一些缓存相干的参数实现对 Response 的缓存,在 Header 中能够指定是否对所有的 Request 申请或者一些 可选的 Request 申请缓存 Resposne,指的留神的是,它不是 output 缓存,也就表明 ASP.Net Core 不会将 response 缓存在 webserver 中。
Response Cache 实际上是一种更好,更不便扩大的缓存机制,它通过在 Http Header 中设置一些缓存相干的响应头来告诉浏览器缓存指定的内容,这就躲避了 client 对 webserver 大量本不须要的申请,后续的申请都是由本地的 client cache 中间接返回,没有了单方的往返工夫消耗。
配置 Response Cache
要想应用 Response Cache
,须要将其注入到 ServiceCollection 容器中,代码如下:
public void ConfigureServices(IServiceCollection services)
{services.AddResponseCaching();
services.AddMvc();}
注入到容器之后,接下来应用 UseResponseCaching()
将其增加到 申请解决管道
中,如下代码所示:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//Other code
app.UseResponseCaching();}
Response 缓存的配置项
Response 缓存中间件提供了三个可选项实现肯定程序的自定义化,列举如下:
- SizeLimit
用于指定 response cache 的最大缓存尺寸,默认是 100 MB。
- UseCaseSensitivePaths
用于指定 response cache 是否对缓存 key 辨别大小写。
- MaximumBodySize
用于指定单个缓存项的最大尺寸,默认是 65MB。
上面的代码片段展现了如何应用这三个选项进行配置。
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCaching(options =>
{
options.UseCaseSensitivePaths = true;
options.MaximumBodySize = 1024;
});
services.AddMvc();}
应用 ResponseCache 个性
到此为止,中间件曾经配置好了,当初能够在 Action 办法上应用 [ResponseCache]
个性了,当然还能够在个性的构造函数中应用如下一些选项。
- Duration
用于指定 Response Cache 的存活工夫。
- Location
用于指定 Response Cache 缓存的地位,有:Any,Client,None。
- NoStore
用于指定是否存储数据在客户端。
- CacheProfileName
用于指定 cache profile 的名字。
- VaryByHeader
用于指定 Vary 响应头。
- VaryByQueryKeys
基于 querystring 参数来实现缓存。
接下来在 Controller.Index
办法上应用 ResponseCache 个性,让输入内容缓存 30s,如下代码所示:
public class HomeController : Controller
{[ResponseCache(Duration = 30)]
public IActionResult Index()
{ViewData["Message"] = "The current time is:" + DateTime.Now.ToString();
return View();}
}
上面是 Index.cs
代码:
@{ViewData["Title"] = "Home Page";
}
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<h1> @ViewData["Message"]</h1>
<p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>
接下来看一下 Http 响应头
是否做了一些变更。
从上图中的 Cache-Control: public,max-age=30
能够看出,Response 被缓存了 30s,不过要留神的是, response 缓存中间件
只缓存 http 200 的服务端响应,意味着非 200 或者一些谬误页面将不会失去缓存。
更多对于 response 缓存中间件
,可参考:https://docs.microsoft.com/en…
译文链接:https://www.infoworld.com/art…
更多高质量干货:参见我的 GitHub: csharptranslate