ASP.NET页面输出缓存

最近因项目要求,需要研究ASP.NET缓存,可是查阅了书本,msdn,网上后有点失望,真是天下文章一大抄啊,大家讲来讲去都是那么几点,没有条理,没有重点,也没有心得,所以我决定自己来写一篇,当然,我是没有能力来改变这一现象的,只是写来自己备忘罢了。  首先有几点要说明:
  1.个人认为缓存只有两种:ASP.NET页面输出缓存与应用程序数据缓存。一般大家也是这么认为的,但是有另外一部份人却把这两个部份分了又分,搞出三五种出来。这就让人感觉很多余了。
  2.所谓控件缓存,其实是用户控件缓存。可能是我理解有问题,我一开始还以为那种html控件,web控件也可以进行缓存的。所以说定义名称要定义清楚。
  3.实现缓存有两种方式:在aspx页面的顶部写页处理指令或者在cs代码里写代码(又叫缓存API),一种是静态设置,一各是动态设置。网上总有些人喜欢说来说去又不总结清楚,搞的人很烦。
  4.实际上只要用到了缓存就一定有缓存依赖。只是有些不那么明显。在我看的文章里一般都把缓存依赖单独作为一章讲解,这是好事,因为在缓存的高级技术里缓存依赖是很重要的,但这并不代表有些缓存就没有缓存依赖。
  好了,下面言归正传。我只讲常用的东东。
  ASP.NET页面输出缓存。其实用户控件缓存跟它没有大的区别,只有一个location不能使用,在这里就一并讲了吧。
  page指令:
  <%@ OutputCache Duration="10" VaryByParam="*" VaryByControl="txtInput" %>
  OutputCache是指令名。Duration是缓存时长,单位是秒。VaryByParam是跟据什么进行缓存。有两个特殊的 值:none表示不随任何参数的不同而缓存,就是只缓存一个版本,表示随任何参数的不同而缓存,表示只要参数发生变化,就缓存一个新版本。 VaryByControl是跟据控件名进行缓存。这里的控件是指一般的服务器控件,不能是用户控件,不然会出现意想不到的结果。
  缓存API:
  虽然ASP.NET页面输出缓存与用户控件缓存在页面指令方面差不多,但在api上面有所区别
  页面缓存api:
  映射的是System.Web.HttpCachePolicy类。
  Response.Cache.SetCacheability(HttpCacheability.Public);
  Response.Cache.SetExpires(DateTime.Now.AddSeconds(3));
  第一句对应的是Location,是说缓存在哪,public是哪里都缓存,nocache是都不缓存,private是客户端缓存,还有其它几个选项。比较关注的是:客户端,代理服务器,服务器。
  第二句对应的是Duration,是说缓存时长,这是个绝对时间,是说到了那个时就是取消缓存。Response.Cache.VaryByParams["none"] = true;
  对应的是VaryByParam用中括号括起参数,中间可用分号分隔多个参数,true表示启用此参数。没有对应VaryByControl的。
  Response.Cache.SetSlidingExpiration(true);
  当用了这一句的时候,所有缓存设置都不启作用了,原因是这个属性是用给代理服务器之类的处于浏览器和Web服务器之间的缓存使用的,而不是给 Web服务器本身的。是特意设计成这样的。Response.Cache.SetNoServerCaching(),表示取消当前所有服务器缓存。