在ASP.NET中强制caching过期的最佳方法是什么?

假设我有一个ASP.NET应用程序在负载均衡器后面的多个Web服务器上运行:

我可以吗:

  • 强制OutputCache(页面和/或控制级别)全局到期?

  • 强制数据caching(即Cache.Insert)到期?

  • 从一个中央位置监控ASP.NETcaching的使用情况(密钥,RAM等)?

一个可能的解决scheme是每次使用caching检查文件的依赖关系的变化。 该文件可能会被触及,这将过期所有caching。 但是,这要求开发人员在所有代码中包含依赖项。 他们是更好的解决scheme吗?

有很多方法可以使这些caching过期,比如页面输出caching

Page.Response.Cache.SetCacheability(HttpCacheability.NoCache) 

基于时间的相关性只是在某个定义的时间点过期。

 Response.Cache.SetExpires(DateTime.Now.AddSeconds(360)); Response.Cache.SetCacheability(HttpCacheability.Private) Response.Cache.SetSlidingExpiration(true); 

现在谈到监控caching,除非caching上有一个API告诉你,那么没有直接的办法。

您当然可以枚举caching,键值对,然后计算每个项目的大小。 听起来不容易吗?

所以这里就是让你的caching监控变得简单。 坦率地说,我从来没有使用过它,但你可以试试看,只是添加一个DLL到你的应用程序的问题。

这里是你的caching键视图的东西,

 ' display contents of the ASP.NET Cache If Cache.Count > 0 Then cc.Append("<b>Contents of the ASP.NET Cache (" _ & Cache.Count.ToString() & " items):</b><br />") For Each item As Object In Cache cc.Append("Key:'" & item.Key & "' Type:" _ & item.Value.GetType().ToString() & "<br />") Next Else cc.Append("<b>ASP.NET Cache is empty</b>") End If 

从Tek-Tips (阅读链接了解详细的解释)

 Response.Expires = 15 Response.ExpiresAbsolute = Now() - 2 Response.AddHeader "pragma","no-cache" Response.AddHeader "cache-control","private" Response.CacheControl = "private" 

http://msdn.microsoft.com/en-us/library/y18he7cw(v=vs.100).aspx

 Response.Cache.SetExpires(DateTime.Now.AddSeconds(60)); Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetValidUntilExpires(true);