ASP.NET 4中的可扩展输出缓存(可以缓存页面/控件等)

所属分类: 网络编程 / ASP.NET 阅读数: 1330
收藏 0 赞 0 分享
输出缓存的前世今生
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文件中,如下:
 
在上面,我添加了一个输出缓存provider,名叫SampleCache,它由OutputCacheSample.dll程序集中的ScottOutputCache类实现。我同时也设置了ASP.NET的默认输出缓存provider为SampleCache,即通过上面的defaultProvider。

现在,每当我在一个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网站首页根据IP自动跳转指定页面的示例

本文介绍的程序主要实现根据IP地址或地址段或IP所在城市进行自动跳转到指定页面的功能,需要的朋友可以参考下
收藏 0 赞 0 分享

asp.net无法获取iis目录的问题解决方法

本文介绍了Asp.Net无法获取IIS拾取目录的解决办法,需要的朋友可以参考下
收藏 0 赞 0 分享

.net中 发送邮件内容嵌入图片的具体实例

这篇文章主要介绍了.net中 发送邮件内容嵌入图片的具体实例,需要的朋友可以参考下
收藏 0 赞 0 分享

在.net中用CheckBoxList实现单选

用CheckBoxList实现单选的原因是我觉得CheckBoxList控件页面展示效果要好看一些,需要的朋友可以参考下
收藏 0 赞 0 分享

ASP.NET―001:GridView绑定List、页面返回值具体实现

这篇文章主要介绍了ASP.NET―GridView绑定List、页面返回值具体实现,需要的朋友可以参考下
收藏 0 赞 0 分享

Ajax实现异步刷新验证用户名是否已存在的具体方法

由于要做一个注册页面,看到许多网站上都是使用Ajax异步刷新验证用户名是否可用的,所以自己也动手做一个小实例
收藏 0 赞 0 分享

ASP.NET汉字转拼音 - 输入汉字获取其拼音的具体实现

这篇文章主要介绍了ASP.NET汉字转拼音 - 输入汉字获取其拼音的具体实现,需要的朋友可以参考下
收藏 0 赞 0 分享

.Net消息队列的使用方法

这篇文章主要介绍了.Net消息队列的使用方法,需要的朋友可以参考下
收藏 0 赞 0 分享

C# web api返回类型设置为json的两种方法

web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面为大家介绍几种不错的方法
收藏 0 赞 0 分享

asp.net获取网站目录物理路径示例

这篇文章主要介绍了asp.net获取网站目录物理路径的方法,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多