2009-02-10 10 views
10

Supongamos que tengo una aplicación ASP.NET ejecuta a través de varios servidores Web detrás de un equilibrador de carga:¿Cuál es el mejor método para forzar la caducidad del caché en ASP.NET?

¿Puedo:

  • Fuerza OutputCache (Página y/o el nivel de control) para expirar a nivel mundial?

  • Force Caché de datos (es decir, Cache.Insert) para caducar?

  • ¿Monitorea el uso de caché de ASP.NET (claves, RAM, etc.) desde una ubicación central?

Una posible solución sería tener cada uso de caché comprobar una dependencia de archivo para los cambios. El archivo podría tocarse y caducaría todo el caché. Sin embargo, esto requiere que los desarrolladores incluyan la dependencia en todo su código. ¿Es una mejor solución?

Respuesta

7

Hay muchas maneras de hacer que éstos expiran el almacenamiento en caché, al igual que la página outputcache por

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

Dependencia del tiempo simplemente expira el tema en un punto definido en el tiempo.

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

Ahora, cuando se trata de caché de supervisión, a menos que haya una API en la caché de decirle, entonces no hay manera directa.

Podría, por supuesto, enumerar la caché, los pares clave-valor y luego calcular el tamaño de cada elemento almacenado. ¿No suena fácil verdad?

Así que here's para facilitar la supervisión de su caché. Francamente diciendo que nunca lo usé yo mismo, pero puedes probarlo, solo el asunto de agregar un dll a tu aplicación.

Y aquí hay algo para sus claves de caché ver,

' 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

Gracias por el enlace de caché aspalliance gerente. Es genial. – frankadelic

0

De Tek-Tips (leer el enlace para una explicación detallada)

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