VS2010与.NET4系列 14.可扩展的ASP.NET4输出缓存

今天介绍 ASP.NET 4 中的输出缓存扩展能力改进。可以用于所有的 ASP.NET 4 应用程序,包括 ASP.NET Web Forms 和 ASP.NET MVC。

目前的输出缓存

ASP.NET 1.0 就引入了输出缓存的概念,它让开发人员能够捕获并在内存缓存中存储页面、控件、控制器和 HTTP 响应产生的输出。在随后的请求中,ASP.NET 就能够通过从缓存产生的内容而不是执行页面/控制器重新生成输出,从而运行的更快。这可以显著地提高应用程序的性能——尤其在内容是基于数据库中数据的情况下(因为内容是输出缓存的,不必为随后的请求去访问数据库了)。

ASP.NET 输出缓存系统非常灵活,足够让你能够根据传给页面/控制器的查询字符串/表单提交参数缓存不同版本的内容(例如,Browse.aspx?category=Beverages 和 Browse.aspx?category=Meat)。它还让你能够基于浏览器类型或客户端的用户语言偏好缓存不同版本的内容。这允许你缓存移动版本的页面,它和为桌面浏览器优化的页面是互相隔离的,以及根据用户是否想以英语还是法语阅读页面来缓存来改变不同的缓存条目。你可以配置 ASP.NET 为特定的输出缓存条目指定专门的时间周期(例如,1分钟,超过这个时间下一个请求会重新产生内容并再次缓存)。你还可以配置 ASP.NET 根据外部事件(例如:缓存的内容在数据库中改变了)动态的让缓存条目失效。

ASP.NET v1 -> v3.5 输出缓存的一个限制就是,缓存存储本身是不可扩展的,即缓存内容总是要存储在即时内存中。

ASP.NET 4 输出缓存可扩展能力

ASP.NET 4 为输出缓存增加了可扩展能力,现在使开发人员能够配置一种或多种自定义的输出缓存提供程序。输出缓存提供程序能够使用任何一种存储机制来持久化输出缓存。这使得使用任何持久机制轻松地创建输出缓存提供程序成为可能,包括本地或远程磁盘、数据库、云存储和分布式缓存引擎(像memcached或velocity)。

你能够通过派生 ASP.NET 4 新的 System.Web.Caching.OutputCacheProvider 类的子类来创建自定义输出缓存提供程序。在派生类中要重写 4 个公共方法,提供添加/移除/获取/更新缓存内容的实现(唯一键会传递进去来标识每个单独的缓存条目)。然后就可以配置 ASP.NET 通过在应用程序的 Web.config 文件中的 <provider> 元素新的子节 <providers> 中注册来使用自定义输出缓存提供程序:

image

上面我添加了一个新的输出缓存提供程序(称为“SampleCache”),它使用了 OutputCacheSample.dll 程序集中的 "ScottOutputCache" 类实现。我还配置了 ASP.NET 把我的 "SampleCache" 实现作为输出缓存的默认实现——这是通过设置 <outputCache> 元素的 "defaultProvider" 属性完成的。

现在,当我在任何 .aspx 页面顶端添加 OutputCache 指令的时候,内容将会使用 ScottOutputCache 提供程序缓存和存储:

<%@ OutputCache Duration="60" VaryByParam="None" %>

同样,如果我在 ASP.NET MVC 控制器内部的动作方法上添加一个 [OutputCache] 特性,内容也将会使用我的 ScottOutputCache 提供程序缓存并存储内容:

image

定制使用哪一个输出缓存提供程序

上面我配置了 ASP.NET 让它在应用程序中无论何时使用输出缓存,默认总是使用我的 "SampleCache" 提供程序缓存内容。

作为稍微更加高级的选项,开发人员还能够配置 ASP.NET 在每个请求基本原理(per-request basis)上动态地选择使用哪个输出缓存提供程序。这对哪些想要拥有更加丰富缓存语义的场景来说非常有用。例如,你可能想使用内置的 ASP.NET 即时内存提供程序缓存站点的主页或最常请求的“前十”页面(因为内容在即时内存中所以超级快),而把较少请求的页面缓存在磁盘上。

你能够动态地在每请求原理上指示使用哪个输出缓存提供程序,这要在应用程序的 Global.asax 文件内部重写 GetOutputCacheProviderName() 方法。下面我会指示在我的应用程序内部为 "Home.aspx" 页面使用内置的即时内存的ASP.NET输出缓存提供程序,而对其他所有请求使用在Web.config文件中注册的提供程序:

image

这种根据场景在提供程序之间切换的能力为各种强大的场景提供了有力支持。

通用的输出缓存提供程序

我们将提供一些示例,演示如何实现一个基于磁盘的输出缓存提供程序,它在文件系统中存储缓存的内容。我们还将提供示例,演示如何把新的 Windows Server AppFabric Caching Service (曾经叫做 "Velocity")集成到输出缓存。AppFabric的缓存服务将会是一个免费的、完全支持的微软分布式缓存系统。当然也能够用流行的开源分布式缓存系统 memcached 实现新的 ASP.NET 4输出缓存。

你可以通过观看 Stefan Schackow 的 ASP.NET 4 Core Runtime talk at PDC 2009 来学习更多关于创建提供程序的知识。你还可以从 this PDC 2009 talk 学习更多关于 AppFabric 的缓存服务知识。

总结

ASP.NET 4 新增的输出缓存提供程序扩展能力让开发人员能够容易地为网站和 Web 应用程序追求更好更智能的输出缓存策略。这些能够显著地提高应用程序的性能和响应能力,同时提高用户体验并减少所需服务器资源的数量。

你可能感兴趣的:(cache,Provider,asp.net,output,4,Extensibility)