2009-02-10 4 views
10

Supposons que j'ai une application ASP.NET en cours d'exécution sur plusieurs serveurs Web derrière un équilibreur de charge:Quelle est la meilleure méthode pour forcer l'expiration du cache dans ASP.NET?

Puis-je:

  • force OutputCache (Page et/ou niveau de contrôle) expirer au niveau mondial?

  • Forcez le cache de données (c'est-à-dire Cache.Insert) à expirer?

  • Surveiller l'utilisation de la mise en cache ASP.NET (clés, RAM, etc.) à partir d'un emplacement central?

Une solution possible consisterait à faire en sorte que chaque utilisation du cache vérifie la dépendance d'un fichier pour les modifications. Le fichier pourrait être touché ce qui expirerait tout le cache. Cependant, cela nécessite que les développeurs incluent la dépendance dans tout leur code. Est-ce leur meilleure solution?

Répondre

7

Il y a plusieurs façons de rendre ces cache expirer, comme la page OutputCache par

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

dépendance basée sur le temps expire simplement l'élément à un point défini dans le temps.

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

Maintenant, quand il s'agit de cache de surveillance, à moins d'une API sur le cache pour vous dire, alors il n'y a aucun moyen direct.

Vous pouvez bien sûr énumérer le cache, les paires clé-valeur, puis calculer la taille de chaque élément stocké. Ne semble pas facile non?

Donc, here's pour faciliter la surveillance du cache. Franchement, je ne l'ai jamais utilisé moi-même, mais vous pouvez essayer, juste ajouter une DLL à votre application.

Et voici quelque chose pour votre point de vue clés du 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

Merci pour le lien vers le cache de aspalliance directeur. C'est bien. – frankadelic

0

De Tek-Tips (lire le lien pour une explication détaillée)

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