2010-08-15 21 views
0

Quels problèmes puis-je rencontrer en utilisant HttpCache pour mettre en mémoire tampon les données d'un service Web, plutôt que de stocker les mêmes données dans une table de base de données? Dans une situation hypothétique où le service était temporairement indisponible, si le serveur avait besoin de redémarrer pendant ce temps, il n'y aurait aucun moyen de re-remplir le cache. Donc, pour cette raison, est-il possible de conserver le cache comme vous pourriez le faire avec l'état de session SqlServer? Je lis le HttpCache est implémenté en utilisant le modèle Singleton. Cela signifie-t-il que je devrais utiliser Mutex lorsque je travaille avec des objets provenant du cache? Qu'arrivera-t-il si le cache est mis à jour d'une part par un processus thread séparé, tout en étant lu par un thread différent?Utilisation de ASP.NET HttpCache pour mettre en tampon les données d'un service Web

Merci.

Répondre

2

Le plus gros problème que vous rencontrerez avec un mécanisme de mise en cache est celui des données périmées. Comme les données sont mises en cache, elles peuvent être aussi anciennes que la durée de vie du cache. Dans les systèmes transactionnels, c'est inacceptable, mais pour d'autres systèmes, c'est bien. Il suffit de comprendre l'âge des données. Je ne sais pas si le cache peut être conservé, mais si vous envisagez de le faire dans une base de données, je vous déconseille d'utiliser un cache en premier lieu, car une partie du point est un accès rapide en mémoire. à vos données. Oui, la mise en cache utilise un magasin en mémoire centralisé comme un Singleton. La réponse à votre question sur Mutexes est que cela dépend de vos habitudes d'accès aux données. La plupart des gens utilisent des caches pour remplir une fois les données. Si la valeur expire, le cache annule leur entrée et ils se repeuplent. Oui, vous pouvez protéger l'accès avec un Mutex (ou plus probablement une instruction lock) afin d'éviter que plusieurs clients ne courent à la fois pour remplir le cache. Mais l'OMI est plus un point de performance qu'un point de consistance des données, car selon toute probabilité, les clients écriront les uns avec les autres avec les mêmes données (encore une fois, cela dépend de votre situation).

+0

Je préfère ne pas utiliser le cache mais le code est déjà écrit. Un thread séparé fonctionne en arrière-plan pour repeupler le cache toutes les 5 minutes environ. C'est sur un site avec 40-100k visiteurs par mois. J'essaie d'établir si elle évoluera bien ou non et si le threading/cache est susceptible de causer des problèmes. – user23048345

+0

Je suppose que cela dépend du nombre d'ordinateurs qui tentent de mettre à jour leurs caches (s'il s'agit d'un scénario de batterie de serveurs). Les problèmes que vous rencontrerez varieront en fonction de la façon dont le cache est repeuplé. Les détails profonds et sales sur la façon dont il est mis en œuvre sont vraiment importants, malheureusement. –