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

10

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

我能否:

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

  • 强制过期Data Cache(即Cache.Insert)?

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

一种可行的解决方案是让缓存的每个使用都检查文件依赖项是否发生更改。可以触发文件来使所有缓存过期。但这需要开发人员在所有代码中都包含依赖项。有没有更好的解决方案?

3个回答

10

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

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

感谢提供 aspalliance 缓存管理器的链接,非常棒。 - frankadelic

0

来自Tek-Tips(请阅读链接以获取详细说明)

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接