Asp.Net – Mise en cache

Voici un point sur les differentes facon d’utiliser le cache en asp.net

Introduction:

En Asp.net il existe 2 type de caches:

– le cache du rendu de la page : OutputCache

– Le cache applicatif qui permet de mettre en cache des objets.

1- Le OutputCache

Pour mettre en cache le rendu d’une page il faut mettre la directive @OutputCache dans la page:

<%@ OutputCache Duration="60" VaryByParam="None"%>

Les paramètres obligatoires sont : Duration et VaryByParam( ou VaryByControl)

Duration: définit la durée de maintien d’une entrée de cache dans le cache de sortie

VaryByParam: paramètres de chaîne de requête ou de Form POST que le cache de sortie utilise pour faire varier l’entrée du cache (délimitée par des virgules)

Remarque: ces parametres peuvent etre placé dans le web.config s’il s’appliquent à l’ensemble du site

<caching>
  <outputCacheSettings>
    <outputCacheProfiles>
      <add name="Cache30Seconds" duration="30"
        varyByParam="none" />
    </outputCacheProfiles>
  </outputCacheSettings>
</caching>

Puis dans la directive OutpuCache

<%@ OutputCache CacheProfile="Cache30Seconds" %>

Toutes les infos sur le site de la msdn

2- Le cache de données applicatives

Le cache objet s’utilise en utilisant la propriété Cache de l’objet HttpContext.

a- Insérer des objets en caches avec précision d’expiration

– expiration absolue

Cache.Insert("objet", "CleCache1",null, DateTime.Now.AddMinutes(1d),
System.Web.Caching.Cache.NoSlidingExpiration);

L’exemple ci dessus insert un objet « objet » avec une clé de cache unique « CleCache1 » et le dernier paramètre précise qu’il s’agit d’un cache absolue.

– expiration décalé (glissant)

Cache.Insert("objet", "CleCache1",null,
System.Web.Caching.Cache.NoAbsoluteExpiration,new TimeSpan(0, 10, 0));

L’exemple ci dessus insert un objet « objet » avec une clé de cache unique « CleCache1 » et le dernier paramètre précise qu’il s’agit d’un cache glissant de 10 min, c’est à dire d’expiration va changer à chaques fois que l’on va aller l’utiliser.

b- Supprimer un objet du cache

La méthode Remove supprime un objet du cache en lui précisant sa clé de cache.

Cache.Remove("CleCache1");

c-Récupérer un objet du cache 

Pour récupérer un objet du cache il faut utiliser sa clé de cache

string cacheObject = (string)Cache["CleCache1"];

si l’objet retourné est null c’est que la clé de cache est vide et donc l’objet n’est plus en cache

Toutes les infos sur le site de la msdn

Vidage du cache:

le cache se vide à différents moments:

1/ selon les paramètres envoyés en entré
2/ lors du recyclage du process de l’application web (ou du redémarrage de l’application dans un cas non web)
3/ le cache est plein et donc .net en supprime les éléments les moins utilisés

Savoir quand le cache expire:

Un des paramètre est une méthode (delegate) qui sera appelé lorsqu’une entrée du cache est supprimée par .net (donc pas appelé lors du recyclage du process)http://msdn.microsoft.com/en-us/library/system.web.caching.cacheitemremovedcallback.aspx

Ou est stocké le cache:

En mémoire, pour les version de .net supérieur a la 2.0 il est possible de créer son propre fournisseur de cache.

Les limites de  ces caches:

  • Pas de partage possible
  • Le fait qu’il soit en mémoire donc qu’il peut occuper de la place nécessaire au reste de l’application.
Merci à Remi bourgarel  pour certains compléments qu’il a apporté à ce billet.

Une réflexion sur “Asp.Net – Mise en cache

  1. Bonjour,

    Il faut noter qu’il existe un namespace dans le .NET Framework 4.0 (System.Runtime.Caching) qui reprend les fonctionnalités de cache d’ASP .NET (System.Web.Caching). Il permet d’être indépendant d’ASP .NET et permet donc d’être intégré dans les couches métiers ou d’accès aux données.

    Pour les nouveaux développements (en 4.0) il faut mieux utiliser le mécanisme de cache contenu dans System.Runtime.Caching.

    Cordialement

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s