2009-08-28 9 views
1

Je souhaite effectuer une mise en cache sur la couche d'accès aux données pour améliorer les performances. J'ai décidé que j'utiliserais le cache HTTPContext, avec une couche d'abstraction par-dessus pour que je puisse basculer d'autres stratégies de cache plus tard si nécessaire.Résultats de la couche Caching Data Access

Fondamentalement, le cache doit être variante, ce qui signifie que pour chaque méthode individuelle qu'il cache un résultat différent en fonction des valeurs qui sont transmis.

Ma question est donnée que si je suis désireux d'avoir un « cache par fonction "et pour que le système détermine s'il faut frapper la base de données ou le cache basé sur les valeurs qui sont passées dans la méthode, comment j'y arriverais (c'est-à-dire prendre un hachage des valeurs des items ou quelque chose - mais doit être un meilleur moyen).

Je sais que je pourrais faire quelques choses avec des problèmes de coupe transversale et le bloc d'application EL et Caching, mais les frais généraux sont un peu plus que ce que je recherche. Je voulais faire quelque chose d'assez léger et que je peux contrôler (par exemple je pourrais passer un paramètre que je pouvais vérifier qui contournerait le cache - par exemple)

Vive Anthony

Répondre

2

Nous utilisons Enterprise Library Caching Bloc d'application pour cela. Entlib Cache fonctionne comme un dictionnaire avec une clé et une valeur.

Entlib cache vous permet de créer plusieurs caches nommés, dans votre cas ce serait un par fonction.

Dans chaque cache, vous pouvez utiliser les paramètres comme clé. Vous pouvez alors le faire comme suit:

  • Essayez d'obtenir la valeur du cache en fonction de la clé.
  • Si la valeur est null, elle est manquante dans le cache.
  • Par conséquent, récupérez la valeur de la base de données et placez le résultat dans le cache afin qu'il soit disponible la prochaine fois.