2009-02-10 10 views
10

Supponiamo Ho un'applicazione ASP.NET in esecuzione su più server Web dietro un bilanciatore di carico:Qual è il metodo migliore per forzare la scadenza della cache in ASP.NET?

Posso:

  • Forza OutputCache (pagina e/o livello di controllo) per scadere a livello globale?

  • Force Data Cache (ad esempio Cache.Insert) in scadenza?

  • Monitorare l'utilizzo del caching di ASP.NET (chiavi, RAM, ecc.) Da una posizione centrale?

Una possibile soluzione sarebbe quella di fare in modo che ogni utilizzo della cache verifichi la dipendenza del file per le modifiche. Il file potrebbe essere toccato, cosa che farebbe scadere tutta la cache. Tuttavia, questo richiede agli sviluppatori di includere la dipendenza in tutto il loro codice. La loro è una soluzione migliore?

risposta

7

Ci sono molti modi per fare questi caching scadere, come pagina OutputCache da

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

dipendenza time-based semplicemente scade l'oggetto in un punto definito nel tempo.

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

Ora, quando si tratta di cache di monitoraggio, a meno che non ci sia un'API sulla cache di dirvi, allora non c'è modo diretto.

Si potrebbe ovviamente enumerare la cache, coppie chiave-valore e quindi calcolare la dimensione di ogni elemento memorizzato. Non sembra facile vero ??

Quindi here's per rendere facile il monitoraggio della cache. Dicendo francamente che non l'ho mai usato da solo, ma puoi provare, basta aggiungere una dll alla tua applicazione.

E qui qualcosa per visualizzare le chiavi della cache,

' 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

Grazie per il link alla cache aspalliance manager. È ottimo. – frankadelic

0

Da Tek-Tips (leggi collegamento per una spiegazione dettagliata)

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