ASP.NET 4中的可扩展输出缓存(可以缓存页面/控件等)
发布时间:2020-12-15 20:33:39 所属栏目:asp.Net 来源:网络整理
导读:输出缓存的前世今生 ASP.NET 1.0引入输出缓存的概念,这使得开发者可以缓存页面、控件、控制器以及HTTP响应的输出到内存中。在后续的Web请求,ASP.NET就可以使用缓存中的内容更快响应。 ASP.NET的输出缓存系统足够灵活,使得我们可以根据不同的查询字符串或
输出缓存的前世今生 ASP.NET 1.0引入输出缓存的概念,这使得开发者可以缓存页面、控件、控制器以及HTTP响应的输出到内存中。在后续的Web请求,ASP.NET就可以使用缓存中的内容更快响应。 ASP.NET的输出缓存系统足够灵活,使得我们可以根据不同的查询字符串或者表单post参数来缓存不同版本的内容。例如test.aspx?category=Vegerable 和 test.aspx?category.aspx?category=Meat。它也允许我们根据浏览器类型或者用户语言偏好来缓存不同版本的内容。比如你可以为应用的手机版本缓存一份数据而为桌面版本缓存另外一份。 我们也可以通过配置ASP.NET来为缓存项设置特定的缓存时间(如1分钟)。我们也可以配置ASP.NET的缓存项根据外部事件动态更新缓存(比如数据库数据更新)。 但是ASP.NET V1到ASP.NET V3.5都只允许内存缓存。 ASP.NET 4输出缓存扩展 ASP.NET 4扩展了输出缓存使得我们可以配置一个或多个输出缓存provider(output cache providers)。输出缓存provider可以使用任意存储机制来持久化输出缓存内容。这使得我们可以把缓存内容存在本地或者远程磁盘、数据库、云端或者分布式缓存引擎中(如memcached或者velocity)。 我们可以通过集成ASP.NET中的System.Web.Caching.OutputCacheProvider类来定制自己的输出缓存provider。然后我们重4个公共方法来实现添加/移除/检索/更新缓存内容(每一个缓存项都必须通过一个唯一的key来标识)。然后我们将这个自定制的输出缓存provider注册到web.config文件中,如下:
现在,每当我在一个aspx页面添加下面的指令,页面内容就会通过ScottOutputCache缓存: <%@ OutputCache Duration="60" VaryByParam="None" %>类似的,如果我给一个action添加[OutputCache]属性,内容页将通过ScottOutputCache缓存: 复制代码 代码如下: [OutputCache(Duration=60)] public ActionResult Browse(string category) { return View(); } 定制使用哪个输出缓存Provider 上面我只提供了一个默认的SampleCache输出缓存Provider。而开发人员实际上可以根据每个请求动态选择输出缓存Provider的。例如我们可以为首页和Top 10页面使用ASP.NET内置的内存provider(它超级迅速,因为内容存在内存中),而把不常用的请求页面缓存到磁盘。 我们可以通过重载应用的Global.asax的GetOutputCacheProviderName()来实现上面的要求: 复制代码 代码如下: public class Global: System.Web.HttpApplication { public override string GetOutputCacheProviderName(HttpContext context) { if(context.Request.Path.EndsWith("Home.aspx") { return "AspNetInternalProvider"; } else { return base.GetOutputCacheProviderName(context); } } } 这样我们单独为Home.aspx页面使用ASP.NET的内存缓存provider,而其他请求使用web.config中配置的缓存provider。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
推荐文章
站长推荐
- asp.net-mvc – 如何手动检查模型是否有效并获取
- asp.net-mvc-5 – 如何使用不同参数类型的相同路
- asp.net-mvc-3 – 在控制器操作完成后使用Javasc
- Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ex
- .net – 为什么ValidateAntiForgeryTokenAttribu
- 如何在ASP.NET按钮中使用Twitter Bootstrap图标?
- asp.net-mvc – ASP.NET MVC 4覆盖发出的html名称
- 资源解释为样式表,但在ASP.NET IIS中使用MIME类型
- Asp.Net Core API网关Ocelot
- asp.net – PayPal REST API DotNet SDK 1.9.1 –
热点阅读