10

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

我可以吗:

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

  • 强制数据缓存(即 Cache.Insert)过期?

  • 从中央位置监控 ASP.NET 缓存使用情况(密钥、RAM 等)?

一种可能的解决方案是让缓存的每次使用都检查文件依赖关系是否有更改。可以触摸该文件,这将使所有缓存过期。但是,这要求开发人员在他们的所有代码中都包含依赖项。他们是更好的解决方案吗?

4

3 回答 3

9

有很多方法可以使这些缓存过期,例如 page outputcache by

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

基于时间的依赖只是在定义的时间点使项目过期。

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

现在说到监控缓存,除非缓存上有API告诉你,否则没有直接的办法。

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

所以这里是为了让你的缓存监控变得容易。坦率地说我自己从未使用过它,但是您可以尝试一下,只需将 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
于 2009-02-10T21:31:16.257 回答
0

来自Tek-Tips(阅读链接了解详细说明)

Response.Expires = 15
Response.ExpiresAbsolute = Now() - 2
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "private"
于 2009-03-09T20:59:58.497 回答
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);
于 2013-01-31T11:17:05.603 回答