74 votes

Avantages du cache par rapport à la session

Quelle est la différence entre le stockage d'une table de données en session et en cache ? Quels en sont les avantages et les inconvénients ?

Ainsi, s'il s'agit d'une simple page de recherche qui renvoie le résultat dans une table de données et le lie à une grille. Si l'utilisateur 'a' fait une recherche et que l'utilisateur 'b' en fait une autre, est-il préférable de la stocker dans la session puisque chaque utilisateur aura probablement des résultats différents ou puis-je encore stocker chacune de leurs recherches dans le cache ou cela n'a-t-il pas de sens puisqu'il n'y a qu'un seul cache. Je suppose que ce que j'essaie de dire, c'est que le cache serait écrasé.

0 votes

Vous mettez en cache les données que vous voulez que tous les utilisateurs utilisent sur l'application. Des données qui pourraient ne pas changer historiquement. La session doit être utilisée pour stocker des données dans le contexte d'un utilisateur, par exemple pour filtrer les résultats des données mises en cache.

3 votes

HttpContext.Current.Cache vs HttpRuntime.Cache ?

1 votes

@Kiquenet J'ai admiré votre effort, en effet.

87voto

M4N Points 48758

Une différence importante est que les éléments du cache peuvent expirer (ils seront retirés du cache) après une durée déterminée. Les éléments placés dans une session y resteront jusqu'à la fin de la session.

ASP.NET peut également supprimer des éléments du cache lorsque la quantité de mémoire disponible devient faible.

Autre différence : l'état de la session peut être conservé à l'extérieur (serveur d'état, serveur SQL) et partagé entre plusieurs instances de votre application web (pour la répartition de la charge). Ce n'est pas le cas avec le cache.

Outre ces différences (comme d'autres l'ont noté) : la session est par utilisateur/session alors que le cache est par application.

7 votes

En fait, le cache peut être stocké en externe avec Velocity.

3 votes

Il est possible d'implémenter un cache qui stocke les valeurs en externe, mais le cadre .Net ne prend pas en charge par défaut les caches externes. Cependant, pour les sessions, les sessions externes sont prises en charge.

0 votes

Un autre problème est que IIS hydrate l'ensemble de la session à chaque demande, alors que le cache peut être beaucoup plus granulaire.

32voto

Martin Clarke Points 3370

À ma connaissance, la principale différence est que la session s'applique à chaque utilisateur, tandis que le cache s'applique aux éléments de l'application.

Comme indiqué dans les autres réponses, vous pouvez stocker des informations par utilisateur dans le cache, à condition de fournir une clé (soit par session, soit par cookie). Vous auriez alors plus de contrôle pour faire expirer les éléments dans le cache et aussi pour définir des dépendances sur eux. Ainsi, si la table de données en question est appelée à changer régulièrement, la mise en cache est probablement une option appropriée. Sinon, s'il s'agit d'une table statique, la session pourrait être plus appropriée. Steven Smith a réalisé une excellente vidéo sur la mise en cache sur le site dnrtv. qui vaut la peine d'être vérifiée.

Cela dépend vraiment de ce que vous essayez d'accomplir, du temps dont vous disposez. Il existe d'autres solutions à envisager en ce qui concerne la manière de stocker l'état dans une application. Selon la taille de la table, vous pouvez envisager de stocker l'état dans un cookie (crypté s'il s'agit d'informations sensibles). S'il s'agit de données liées à l'application, vous pouvez également utiliser un champ statique sur une page ou une classe. Il existe également l'objet Application.

Mise à jour : Je pense que la question clé que vous devez vous poser, est de savoir qui doit voir ces données.

Are they going to access the data frequently?  

(Non, pas la peine).

Is it going to change?  

(Non, utilisez un champ statique ou une application).

Is it acceptable for user a and user b to see the same results?  

(Non, utilisez le cache avec une clé comprenant le nom d'utilisateur et le terme de recherche).
(Oui, utilisez le cache en utilisant une clé du terme de recherche).

Honnêtement, si vous n'êtes pas très avancé dans votre développement, j'envisagerais de reporter la question de la mise en cache/état à une date ultérieure - vous n'en aurez peut-être même pas besoin.

Les trois premières règles de l'optimisation des performances sont les suivantes : 1. Mesurez, 2. Mesurez encore. 3. Mesurez encore...

3 votes

Seulement si vous rendez la clé de cache spécifique à cette sessionID

2 votes

HttpContext.Current.Cache vs HttpRuntime.Cache ? HttpContext.Current.Cache est par utilisateur ?

0 votes

Vous dites Mesurer plus, plus, encore . Comment mieux mesurer, modèles et pratiques ? un échantillon ?

16voto

Nabeel Points 3

Une autre différence importante, L'état de la session sera bloqué si des requêtes Ajax asynchrones simultanées sont exécutées, cela affectera les performances

6voto

Greg Ogle Points 3964

Le cache se trouve dans la portée de l'application et a pour but de réduire le nombre de fois qu'un élément de données est obtenu. Session se trouve dans la portée de la session d'un utilisateur et a pour but de donner un état particulier à l'utilisateur.

5voto

Andrew Hare Points 159332

Cela dépend de la façon dont vous avez configuré la session pour ASP.NET. Stockez-vous la session dans une base de données ou en mémoire ? Si c'est en mémoire, utilisez-vous un serveur séparé ou le serveur Web actuel pour la session ?

Selon la façon dont les choses sont configurées pour vous, il peut y avoir des répercussions sur les performances lorsque vous utilisez quelque chose comme une table de données, ce qui m'indique que vous stockez peut-être de grandes quantités de données.

La session est également stockée par utilisateur et est récupérée par utilisateur au moyen de son ticket de session qui est stocké soit dans un cookie de session, soit sur l'URL s'il n'accepte pas les cookies et que vous avez configuré ASP.NET en mode sans cookie. Tout ce que vous mettez en cache sera mis en cache au niveau de l'application et sera disponible pour toutes les sessions d'utilisateurs, ce qui n'est pas forcément ce que vous souhaitez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X