2010-03-25 12 views
4

J'ai récemment reçu un projet qui contient plusieurs applications Web sans structure MVC. Pour commencer, j'ai créé une bibliothèque (DLL) qui contiendra la logique métier principale. Le problème est avec la mise en cache - Si j'utilise l'objet de cache de contexte Web actuel, je risque de me retrouver avec une mise en cache en double (car le contexte web sera différent pour chaque application).Comment gérer le cache BL pour plusieurs applications Web?

Je pense actuellement à implémenter un mécanisme de mise en cache simple avec un modèle singleton qui permettra aux différents sites Web (alias différents domaines d'application) de partager leur «sagesse de mise en cache».

Je voudrais savoir quelle est la meilleure façon de résoudre ce problème.

EDIT: Je n'utilise qu'un seul serveur (avec plusieurs applications).

+0

Combien lee sens avez-vous dans la conception? De combien de cache avez-vous besoin? Pouvez-vous donner quelques détails supplémentaires? J'ai quelques réflexions mais j'aimerais en savoir un peu plus sur le problème en premier. – GrayWizardx

+0

Supposons que la mise en cache complète aura lieu. –

Répondre

0

On m'a aussi proposé d'utiliser SharedCache, qui ressemble exactement à l'architecture que je recherche: Single Instance Caching.

+0

Eh bien, SharedCache a vraiment fonctionné pour moi. –

1

Selon le type et la taille des données que vous voulez cache, je vous suggère:

  1. Pour les petites quantités de données primitive: nCacheD (CodePlex) - memcached Redux pour .net
  2. Pour objets lourds: MS modèles et pratiques Caching Block (msdn)

en général cependant, je regardais mes exigences et vraiment faire en sorte un cache qui englobe tout est vraiment nécessaire, et le code d'écriture pour maintenir son état (et ajuster sa consommation de ressources) ne serait pas plus cher que d'aller directement à la base de données. Si la plupart des éléments que vous souhaitez mettre en cache sont des pages statiques ou une combinaison de contenu dynamique & statique, je souhaiterais utiliser le cache de niveau page IIS/ASP.NET.

+0

Si je ne me trompe pas, nCacheD est principalement utilisé pour maintenir le cache entre plusieurs serveurs. J'ai seulement un serveur avec plusieurs applications, donc cela ressemble à une surcharge pour mon problème. –

+0

memcached (checkout memcached.org) est un cache clé-> valeur, vous pouvez l'exécuter sur seulement 1 ou autant que vous le souhaitez. – Dobriak

1

J'ai deux suggestions différentes selon vos plans d'être évolutif. Quel que soit le cache dorsal que vous choisissez, je suggère que vous implémentiez d'abord une couche adapter pattern qui vous extrait de votre cache, ce qui limitera votre dépendance au cache et vous permettra de l'échanger plus tard.

Si vous souhaitez effectuer une mise à l'échelle en ajoutant une batterie de serveurs Web (plusieurs serveurs d'applications), examinez la vitesse. Microsoft va empaqueter ceci dans 4.0 mais c'est un CPT3 actuellement et est très facile à utiliser.

Documentation

Download

Si vous ne prévoyez pas de passer à un système de plusieurs serveurs puis il suffit d'utiliser le HttpContext.Current.Cache

+0

HttpContext.Current.Cache est par application, j'ai plusieurs applications sur un serveur - ce qui signifie que chaque application aura son propre cache, qui est le problème que j'essaie de résoudre. –

+0

Alors la vélocité est votre réponse (libre). – Nix