Question

Pour un composant .NET qui sera utilisé à la fois dans les applications Web et dans les applications client riches, il semble y avoir deux options évidentes pour la mise en cache :System.Web.Caching ou Ent.Lib.Bloc de mise en cache.

  • Qu'est ce que tu utilises?
  • Pourquoi?

Système.Web.Caching

Cette utilisation est-elle sûre en dehors des applications Web ?J'ai vu des informations mitigées, mais je pense que la réponse est peut-être pas vraiment.

Je ne m'attends pas à utiliser l'un de ses points forts, Dépendance SQLCache, mais l'ajout de CacheItemUpdateCallback dans .NET 3.5 semble être une très bonne chose.

Bloc d'application de mise en cache de la bibliothèque d'entreprise

  • d'autres blocs sont déjà utilisés donc la dépendance existe déjà
  • la persistance du cache n'est pas nécessaire ;la régénération du cache au redémarrage est OK

Certains éléments du cache doivent toujours être disponibles, mais être actualisés périodiquement.Pour ces articles, recevoir un rappel après un élément a été supprimé n’est pas très pratique.Il semble qu'un client devra simplement dormir et interroger jusqu'à ce que l'élément de cache soit à nouveau rempli.

Memcached pour Win32 + Client .NET

Quels sont les avantages et les inconvénients lorsque vous n'avez pas besoin d'un distribué cache ?

Était-ce utile?

La solution

Voici les éléments que je considère pour le sujet de la mise en cache :

Memcached Win32 Velocity .NET CACHE ENTERPRISE BIBLORY CACHING Application Block

MemCached Win32 : Jusqu'à récemment, j'utilisais MemCached Win32.Cela s'apparente à une ferme Web (de nombreux serveurs servent le même contenu pour une haute disponibilité), mais il s'agit d'une ferme de cache.Cela signifie que vous pouvez l'installer localement sur votre serveur Web dans un premier temps si vous n'avez pas les ressources nécessaires pour aller plus loin.Ensuite, au fur et à mesure que vous avancez, vous pouvez évoluer horizontalement (plus de serveurs) ou verticalement (plus de matériel).Il s'agit d'un produit qui a été porté du MemCached d'origine pour fonctionner sous Windows.Ce produit a été largement utilisé sur des sites à très fort trafic. http://lineofthought.com/tools/memcached

Rapidité: C'est la réponse de Microsoft à des produits tels que MemCached.MemCached est absent depuis un certain temps, Velocity est en mode CTP.Je dois dire que d'après ce que j'ai lu jusqu'à présent, ce produit me fera certainement tourner la tête une fois sorti.Mais je ne peux pas me résoudre à mener de grands projets de production sur un produit CTP sans aucun historique.J'ai commencé à jouer avec, car une fois qu'il aura pris de l'ampleur, MemCached ne sera même plus comparable à ceux enfermés dans le monde Windows ! http://blogs.msdn.com/velocity/

Cache .NET : Il n’y a aucune raison de négliger le cache .NET standard.Il est intégré et prêt à être utilisé gratuitement et sans aucune configuration (majeure) requise.Il offre de la flexibilité en offrant des mécanismes de stockage d'éléments dans la mémoire locale, un serveur d'état UNIQUE ou une base de données centralisée.Velocity intervient lorsque vous avez besoin de plus d'un seul serveur d'état (cache en mémoire) et que vous ne souhaitez pas utiliser une base de données lente pour conserver votre cache.

Bloc d'application d'entreprise : Je reste à l'écart de tous les blocs d'applications d'entreprise.Ce sont des frameworks lourds qui donnent plus que ce dont j'ai généralement besoin !Tant que vous n'oubliez pas d'emballer tout ce qui touche du code qui n'est pas le vôtre et de suivre des règles simples de codage, tenez-vous-en à l'une des autres méthodes plutôt qu'à celle-ci !(juste mon opinion bien sûr - MySpace exploite autant que possible les blocs d'applications d'entreprise !)

Vous n'êtes pas obligé de choisir d'avance ! Je crée généralement un wrapper de cache avec lequel je communique dans mon code pour des méthodes telles que Get, Set, Exists, Remove, ListKeys, etc.Cela indique alors un niveau sous-jacent d’abstraction du cache qui peut pointer vers le cache MemCached, Velocity ou .NET.J'utilise StructureMap (ou choisis un autre conteneur IoC) pour injecter la forme de cache que je souhaite utiliser pour un environnement donné.Dans ma boîte de développement locale, je pourrais utiliser le cache .NET dans la session.En production, j'utilise généralement MemCached Win 32.Mais quelle que soit la manière dont il est configuré, vous pouvez facilement échanger les éléments pour essayer chaque système et voir ce qui fonctionne le mieux pour vous.Vous devez simplement vous assurer que votre application en sait le moins possible sur la façon dont les éléments sont mis en cache !Une fois cette couche d'abstraction en place, vous pouvez alors faire des choses comme exécuter un algorithme de compression (gzip) pour toutes les données qui entrent et sortent du cache, ce qui vous permettrait de stocker 10 fois la quantité de données dans le cache.- de manière transparente.

Je couvre .NET Cache, MemCached Win32, StructureMap et les abstractions appropriées dans mon livre si vous êtes intéressé !

Réseaux sociaux ASP.NET 3.5 (http://www.amazon.com/ASP-NET-3-5-Social-Networking-Enterprise-ready/dp/1847194788/ref=sr_1_1?ie=UTF8&s=books&qid=1225408005&sr=8-1 ) Andrew Siemer www.andrewsimer.com blog.andrewsimer.com www.socialnetworkingin.net

Mise à jourModification du lien qui répertorie les sites utilisant Memcached.Merci David d'avoir remarqué qu'il était cassé !

Autres conseils

Gardez à l'esprit que la documentation EntLib vous oriente spécifiquement vers le cache ASP.NET pour les applications ASP.NET.C'est probablement la recommandation la plus forte pour l'utiliser ici.De plus, le cache EntLib n'a pas de dépendances, ce qui est pour moi une raison importante de ne pas l'utiliser.

Je ne pense pas qu'il y ait une limitation technique en tant que telle sur l'expédition de System.Web dans le cadre de votre application, bien qu'il soit légèrement étrange qu'ils aient mis cet avis sur la page .NET 3.5.Hanselman dit en fait qu'il a commencé par être effrayé par cette idée, mais qu'il en est devenu convaincu.De plus, si vous lisez les commentaires, il dit que le bloc comporte trop de pièces mobiles et que le cache ASP.NET est beaucoup plus léger.
Je pense que c'est exactement le genre de problème que Rapidité va résoudre, mais ce n'est qu'un aperçu pour l'instant :-(

Je dirais d'utiliser Web.Caching et de voir comment vous vous en sortez.Si vous placez une sorte de couche d'abstraction par-dessus, vous avez toujours la possibilité de l'échanger ultérieurement contre le bloc EntLib si vous rencontrez des problèmes.

Jeter un coup d'œil à memcaché.Il s’agit d’un système de mise en cache distribué vraiment cool, rapide et léger.Il existe des API pour plusieurs des langages les plus populaires, dont C#.Cela peut ne pas bien servir du côté client (à moins bien sûr que le client n'obtienne les données mises en cache à partir d'un serveur quelconque), mais si vous résumez votre utilisation de memcached à une interface spécifique, vous pouvez alors implémenter l'interface avec une autre mise en cache. système.

@Davide Vosti

"S'ils le mettent dans l'espace de noms Web, je pense que c'est pour une bonne raison." Cette même logique s'applique-t-elle à la concurrence et à la coordination Runtime (CCR) dans le Studio robotique?Non?je ne le pensais pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top