标签:
Duration : 缓存时间,以秒为单位,这个除非你的Location=None,可以不添加此属性,其余时候都是必须的。
Location : 缓存放置的位置; 该值为枚举值:
None: 当被设置为None时,其余的任何设置将不起作用
Any : 页面被缓存在浏览器、代理服务器端和web服务器端;
Client : 缓存在浏览器;
DownStream : 页面被缓存在浏览器和任何的代理服务器端;
None : 页面不缓存;
ServerAndClient : 页面被缓存在浏览器和web服务器端;
默认为Any 。
Shared : 用来控制用户控件输出内容是否能够被多个页面共享。默认值为false。
VaryByCustom : 常用! 任何自定义输出缓存的文字。
使用这个参数之后,可以很方便的使缓存过期..需要在 Global.asax文件中重写 HttpApplication.GetVaryByCustomString 方法..
每一个要缓存的方法上都有缓存的配置..无论是单独写在Action上的..还是由web.config文件统一配置的..都要写 VaryByCustom参数..里边是一个名称..会是系统建立的这个缓存的类别词..
在这个类别上..会因为访问参数不同而建立多个缓存..这些缓存会在Global.asax中重写的GetVartByCustomString方法中得到一个字符串.. 这个字符串和这个缓存形成对应关系..类似与键值对..
当下次访问同一类别同一参数同一缓存时..会先调用GetVaryByCustomString()方法..如果得到的字符串与上次不一样了..则会丢弃缓存..执行Action里的逻辑重新生成缓存..
代码:
[OutputCache(Duration=3600,Location=System.Web.UI.OutputCacheLocation.ServerAndClient,VaryByCustom="goods")] public ActionResult Index() { //Response.Cache.SetOmitVaryStar(true); return View(); }
运行顺序:
第一次访问 /Home/Index
Action 读取..执行逻辑..渲染页面..
执行Global.asax中的重写方法 GetVaryByCustomString(HttpContext context, string custom) 得到一个值..
然后发现配置方式为 varyByCustom 参数为 goods..
其中custom参数就是前边action配置上的 varyByCustom 参数值 goods
在 GetVaryByCustomString方法中执行 一般用switch结构..goods
最终程序返回一个string..无论是什么内容..程序会记录下来..与该试图做一个对应..
至此第一次缓存结束..
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二次访问的时候..程序会与第一次执行顺序不同..先执行 GetVaryByCustomString custom参数值为goods..
最终返回的值会与第一次的值做比对..
一样的话..程序会直接输出缓存..并不会去执行action方法..
而如果与第一次不一样..则会直接丢弃缓存..按第一次执行的顺序重新去执行action方法..(执行action..渲染页面..然后是GetVaryByCustomString)重新生成
至此得出..只要控制了每一个action对应的varyByCustom参数..就可以做到缓存的更新..
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
另外备注一点..
OutPutCache默认会根据参数不同产生不同的缓存..所以..在上述的过程中..即使vartByCustom的参数都是goods.. 但是后边ID不同..也会产生不同的缓存实例
(未完待续)
标签:
原文地址:http://www.cnblogs.com/iiwen/p/5141928.html