现在有件棘手的事,网站的 outputcache 设为 30分钟,当数据源更新后(非数据库),网站可能需要等到30分钟后才能更新,等过了 30几分钟后,数据源又有了另外一次更新,如此这般,网站上的数据,基本上都是错的。
刚开始接触 outputcache 的时候,同事说它只能自动过期,而不能删除或强制过期,于是,我一直这样认为。
但是并不是这样的,outputcache 可以删除,可以强制更新。
更新页面的 outputcache 可以用 Response 提供的方法:
AddCacheDependency 将一组缓存依赖项与响应关联,这样,如果响应存储在输出缓存中并且指定的依赖项发生变化,就可以使该响应失效。
AddCacheItemDependencies 已重载。 使缓存响应的有效性依赖于缓存中的其他项。
AddCacheItemDependency 使缓存响应的有效性依赖于缓存中的其他项。
AddFileDependencies 已重载。 使缓存响应的有效性依赖于缓存中的其他项。
AddFileDependency 将单个文件名添加到文件名集合中,当前响应依赖于该集合。
比如:
Response.AddFileDependency(Server.MapPath("/test.txt"));
当 test.txt 改变了, 页面的 outputcache 就会失效。
用户控件有 CachePolicy.Dependency, 比如:
if( test1 != null ) {
test1.CachePolicy.Dependency = new CacheDependency(Server.MapPath("/test1.txt"));
}
if( test2 != null ) {
test2.CachePolicy.Dependency = new CacheDependency(Server.MapPath("/test2.txt"));
}
当 test1.txt 改变时, UserControl test1 的 outputcache 就会失效,而不会影响 test2
另外:
1,如果设置了 outputcache 指令,比如 duration 为 60 , 在这 60 秒内如果依赖项没有发生改变,outputcache 会自动过期。
2,如果 主页面(aspx)里有 outputcache 指令,UserControl(ascx)也有 outputcache指令 ,那么 UserControl 的依赖项改变,只能等主页面的 outputcache 过期才能反映出来。就是说 userControl 的内容 , 也做为 主页面的一部分而被放到主页面 outputcache 里了。
由此看来,我们网站上有很多纰漏,outputcache 套的乱七八糟的。
| < Prev | Next > |
|---|
Last Updated ( Wednesday, 05 May 2010 23:55 )



