2009-01-29 5 views
11

Les objets métier dynamiques d'un site doivent-ils être stockés dans la session des utilisateurs ou utiliser la mise en cache ASP.Net (objets tels que les commandes, les informations de profil, etc.)?Objets de cache de données et de session dans ASP.Net

J'ai travaillé avec des sites qui utilisaient des sessions pour stocker des objets métier, mais je me demandais ... Quels sont les avantages ou les inconvénients de la mise en cache?

Répondre

23

Si les objets sont partageables entre les sessions utilisateur, utilisez le cache. Si les objets sont uniques à chaque session (peut-être parce qu'ils sont régis par des autorisations), stockez-les dans la session. La session en cours de processus elle-même est stockée dans le cache, de sorte que le facteur décisif doit être la portée des données.

+4

Une autre considération serait le niveau de contrôle et de granularité nécessaire pour la durée de vie des données mises en cache. La session vous limite à une stratégie d'expiration glissante basée sur la période d'expiration de l'état de la session globale. L'utilisation directe du cache vous donne un contrôle supplémentaire sur ces paramètres. –

2

Le cache système ASP.NET est global pour l'application où la session est unique pour l'utilisateur actuel. Si vous choisissez d'utiliser le cache global pour stocker des objets, vous devrez créer une stratégie d'identification d'objet afin que vous puissiez obtenir les objets corrects pour chaque utilisateur.

Si vous souhaitez améliorer les performances, il est préférable de remplacer l'état de session ASP.NET par un cache mémoire distribué, tel que la vélocité de Microsoft. Microsoft a publié des articles sur la façon de remplacer l'utilisation de la session pour cibler Velocity. Vous pouvez également utiliser Memcache ou d'autres produits similaires de manière similaire.

2

Les objets de session sont adaptés aux données utilisateur uniquement. En revanche, les objets Cache sont plus adaptés aux données partagées pour l'application.
La clé pour enregistrer dans l'un ou l'autre est de déterminer si ce que vous essayez de stocker sera des données utilisateur ou il doit être partagé dans toute l'application. Session => Une page Web avec une interface étape par étape (un test en ligne par exemple). Cache => Les informations affichées dans un type de widget météo (comme celui que google a sur sa page igoogle.com).
Espérons que cela aide.

6

La mise en cache est juste cela - la mise en cache. Vous ne pouvez jamais compter sur des entrées qui existent, donc aucune hypothèse ne doit être faite à cet égard: soyez prêt à aller directement à la base de données (ou ailleurs) pour recréer les données. D'autre part, la session est plus adaptée au stockage d'objets, bien que personnellement j'essaie d'éviter le stockage de session en faveur d'une base de données. Je fais habituellement que par abstraire de la boutique derrière une interface ISessionStoreService opaque:

interface ISessionStore 
{ 
    T GetEntry<T>(string key); 
    void SaveEntry<T>(string key, T entry); 
} 

puis « dépendance d'injection » mise en œuvre appropriée, que ce soit InmemorySessionStore, DbSessionStore ou autre.

1

Bien que vous puissiez stocker votre objet métier dans le cache, Cache est conçu pour améliorer les performances et non la gestion d'état. Imaginez-vous que vous avez un processus d'obtention de 1000 enregistrements de la base de données (et cela prend environ 3 secondes) et vous en aurez besoin pour quelques minutes. Vous pouvez stocker vos objets dans Cache et y définir la date d'expiration, la priorité et la dépendance (comme SqlDependency ou FileDependency), ainsi pour les prochaines requêtes, vous pouvez utiliser les données mises en cache au lieu de les récupérer dans la base de données. Vous pouvez stocker votre objet dans Session mais vous ne pouvez pas définir de dépendance pour Session par défaut. Le cache a également un comportement unique: lorsque le système a besoin de mémoire, il libère des objets du cache en fonction de sa priorité. Les objets Cache sont globaux à Application et partagés entre tous les utilisateurs mais Session n'est pas partagée et est utilisable pour chaque utilisateur (Session).

Questions connexes