假设我有一个ASP.NET应用程序在负载均衡器后面的几个Web服务器上运行:
我可以:
强制OutputCache(页面和/或控制级别)全局到期?
强制数据缓存(即Cache.Insert)到期?
从中央位置监控ASP.NET缓存使用情况(密钥,RAM等)?
一种可能的解决方案是让每次使用缓存检查文件依赖性以进行更改。可以触摸该文件,该文件将使所有缓存失效。但是,这要求开发人员在所有代码中包含依赖项。他们是更好的解决方案吗?
答案 0 :(得分:8)
有很多方法可以使这些缓存过期,例如
页面输出缓存Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)
基于时间的依赖性只是在定义的时间点使项目到期。
Response.Cache.SetExpires(DateTime.Now.AddSeconds(360));
Response.Cache.SetCacheability(HttpCacheability.Private)
Response.Cache.SetSlidingExpiration(true);
现在谈到监控缓存,除非缓存中有一个API告诉你,否则没有直接的方法。
您当然可以枚举缓存,键值对,然后计算存储的每个项目的大小。听起来不容易吗?
所以here's使您的缓存监控变得简单。坦率地说,我自己从未使用它,但你可以尝试一下,只需在你的应用程序中添加一个dll即可。
这里有一些缓存键视图,
' 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
答案 1 :(得分:0)
从Tek-Tips(阅读链接获取详细说明)
Response.Expires = 15
Response.ExpiresAbsolute = Now() - 2
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "private"
答案 2 :(得分:0)
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);