2009-02-10 96 views
10

假設我有負載平衡器後面的ASP.NET應用程序運行在多個Web服務器:在ASP.NET中強制高速緩存到期的最佳方法是什麼?

我可以:

  • 力的OutputCache(頁和/或控制電平)在全球範圍內會過期嗎?

  • 強制數據高速緩存(即Cache.Insert)過期?

  • 監視ASP.NET緩存來自中央位置的使用情況(密鑰,RAM等)?

一個可能的解決方案是使每次使用緩存檢查文件依賴性的變化。該文件可能會被觸及,從而導致所有緩存過期。但是,這需要開發人員在其所有代碼中包含依賴項。他們是更好的解決方案嗎?

回答

7

有許多方法可以使這些高速緩存到期,如頁面輸出緩存由

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 
+0

感謝您的鏈接到aspalliance緩存經理。這很棒。 – frankadelic 2009-09-08 04:32:08

0

Tek-Tips(閱讀鏈接瞭解詳細說明)

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