web-dev-qa-db-fra.com

Memcached avec Windows et .NET

Quelqu'un a-t-il déjà implémenté memcached pour une utilisation en production dans un environnement Windows? Étant donné que de nombreux blogs que j'ai lus, il n'est pas recommandé d'exécuter memcached dans Windows, en particulier pour une utilisation en production, par exemple exécuter memcached sous Windows .

Et encore une chose, quel client memcached est bon à utiliser avec c # et .net 3.5? J'ai trouvé beaucoup d'alternatives telles que Memcached Providers @ Codeplex , Beitmemcached , et memcached provider @ Sourceforge

83
Funky81

Pourquoi avez-vous besoin d'exécuter memcached sur Windows? C'est une affaire coûteuse dans un environnement de production.

Si votre code doit s'exécuter dans un environnement Windows, procurez-vous un client memcached Windows et parlez à une machine memcached basée sur * nix.

Dans un environnement de production exécutant memcached sur Server 2003 ou 2008, cela signifierait que vous obtenez des licences pour toutes ces boîtes. Linux vous offrira tous les avantages OSS. Le TCO augmentera de façon linéaire avec memcached sur Windows

Modifier:

Cela fait environ 1,5 an que j'ai écrit cette réponse et beaucoup de choses ont changé depuis. Vous devez en tenir compte, surtout lorsque quelqu'un comme Dustin commente.
Voici donc comment vous pouvez obtenir le memcached sur les fenêtres en cours d'exécution. Télécharger memcached pour Windows depuis Couchbase (anciennement Northscale) .
.

c:\Program Files\memcached> memcached.exe -m 128.

Ici, memcached s'exécute avec un maximum de 128 Mo d'utilisation. Vous ne voulez pas que memcached occupe toute la mémoire de votre serveur Web.

Au moment où vous avez décidé de évoluer memcached, vous devrez tenir compte de ce que j'ai dit plus tôt. Compressez également vos valeurs dans les combinaisons de valeurs clés. Les serveurs Web consomment généralement très peu d'utilisation du processeur (2-3%) et la compression apporte beaucoup de valeur au réseau tout au long de l'utilisation du processeur. Si vous êtes trop préoccupé par la compression normale, essayez LZO

49
Cherian

Je suis surpris que personne ici n'ait encore à mentionner Redis - il est l'un des plus riches en fonctionnalités et les plus rapides (110 000 SET par seconde sur une boîte Linux d'entrée de gamme). prise en charge de la structure de données pour les chaînes, les ensembles, les listes, les ensembles triés et les hachages.

Bien que Windows ne soit pas une plate-forme officiellement prise en charge, il fonctionne parfaitement sous Windows avec tous les tests réussis. J'ai des versions de Windows (utilisant Cygwin) disponibles ici: https://github.com/ServiceStack/ServiceStack.Redis#redis-server-builds-for-windows

Il possède également des liaisons client pour presque tous les langages de programmation utilisés aujourd'hui. Je maintiens un client Open Source C # Redis riche avec prise en charge native de l'API pour tout type C # POCO, prise en charge des transactions et gestionnaires de clients Thread-safe prêts à être déposés dans n'importe quel IOC à: https://github.com/ServiceStack/ServiceStack.Redis

21
mythz

Étant donné que Velocity n'existait pas à l'époque, j'ai utilisé un port memcached pour Windows pour la société pour laquelle je travaille, Skiviez. Il n'existe principalement que pour fournir un cache centralisé pour plusieurs processus de travail sur la même machine. Cela fonctionne bien depuis environ 18 mois sur un site de commerce électronique qui voit une utilisation modeste (~ 18 500 visites/jour). Le client que j'ai utilisé était Enyim intégré comme fournisseur de cache pour iBATIS.NET. Ce client semble fonctionner assez bien; les clients memcached ne sont pas très compliqués pour commencer non plus.

Si je devais le refaire, je regarderais probablement Velocity si j'étais déterminé à rester sur Windows pour ma solution de mise en cache distribuée. Mais ça marche maintenant, donc je ne vais pas y toucher.

(En plus: depuis lors, j'ai annulé la majeure partie du besoin de cache en ajoutant certains Cache* colonnes aux tables de clés de la base de données mises à jour chaque soir par une tâche planifiée. Cela a fini par mettre beaucoup moins de pression sur les ressources tout autour, du coup initial en temps CPU en interrogeant la base de données à la pression subséquente sur la disponibilité de la mémoire en gardant les résultats mis en cache assis dans memcached. Cela l'a également rendu beaucoup plus explicite dans le code lorsqu'une version en cache des données est accessible par rapport à une version calculée à la volée. Je suis sûr que vous avez de nombreuses raisons d'utiliser un cache distribué, mais cela vaut toujours la peine de prendre du recul et de se demander si vous en avez vraiment besoin!)

12
Nicholas Piasecki

je ne sais pas quel est le projet sur lequel vous travaillez, mais vous voudrez peut-être jeter un œil au projet Microsoft Velocity À partir de la page:

"Velocity" est une plate-forme de cache d'application en mémoire distribuée pour développer des applications évolutives et hautes performances. "Velocity" peut être utilisé pour mettre en cache n'importe quel objet Common Language Runtime (CLR) et fournit un accès via des API simples. Les aspects clés de "Velocity" sont les performances du cache distribué, l'évolutivité et la disponibilité.

J'ai vu quelques démos et on dirait qu'il a vraiment une belle intégration avec le framework .net.

Le problème avec les API clientes est que vous devez toujours avoir une instance de memcached en cours d'exécution sur une autre boîte de préférence comme vous l'avez noté, en utilisant la pile LAMP. L'utilisation de la vélocité signifie que vous allez toujours fonctionner sur la même pile et qu'il y a une intégration plus étroite sur la plate-forme .net.

Cela dit, si vous souhaitez utiliser velocity comme cache pour d'autres applications .net, vous devrez peut-être écrire votre propre API pour exposer les données de vélocité à la consommation.

7
lomaxx

jetez un oeil à SharedCache . son open source, simple d'utilisation et très fiable.

système de mise en cache d'objets de mémoire distribuée hautes performances, de nature générique, mais destiné à accélérer le Web dynamique et/ou gagner des applications en allégeant la charge de la base de données. N'oubliez pas de nous rendre visite à http://www.sharedcache.com

6
kay.one

Velocity est un peu plus compliqué à administrer, mais il est bien plus puissant que Memcached. Je ne suis pas anti-memcached, pas du tout, c'est super. Mais pour aller de l'avant, les nouveaux projets purement basés sur .NET sont fous de ne pas tirer parti de Velocity, même dans son état actuel non publié.

6
Silvas

Le problème avec les API clientes est que vous devez toujours avoir une instance de memcached en cours d'exécution sur une autre boîte de préférence comme vous l'avez noté, en utilisant la pile LAMP.

Pas du tout vrai. La pile LAMP (Linux, Apache, MySQL, PHP) n'est pas requise pour exécuter Memcached. Je préfère actuellement memcached à la vitesse jusqu'à ce que la vitesse soit hors CTP. J'ai joué un peu avec la vélocité mais je l'ai trouvée trop lourde. Je suis tout cela KISS chose, vous savez ... restez simple. Rien de plus simple que la mise en cache ... Get (key) ... Put (key, value) ... Destroy ( Clé).

3
TMOSS
2
Peter K.

Je sais que je suis un peu en retard à la fête ici, et il y a déjà des tonnes de bonnes réponses.

Nous avons utilisé Membase sur Windows Server avec beaucoup de succès. Il est 100% compatible avec Memcached, et possède un programme d'installation Nice GUI et un serveur de configuration Web. Il est extrêmement facile à administrer.

Il existe également d'autres fonctionnalités NoSQL incluses, qui sont en dehors de la portée de ce fil, mais qui méritent d'être examinées. Ils ont une licence gratuite pour le développement, les tests et les serveurs de production (limités).

Téléchargements Membase

Cette même page a une installation de Windows pour Memcached uniquement, si vous ne voulez aucune des fonctionnalités supplémentaires de Membase.

1
Eric Burcham

Veuillez suivre les liens mentionnés ci-dessous pour voir la solution à cette question.

Je pourrais implémenter le memcached pour une utilisation en production dans un environnement Windows.

http://www.codeproject.com/Articles/96698/Implementing-Distributed-Caching-using-Memcached http://www.deanhume.com/Home/BlogPost/object-caching--- -net-4/37 http://latebound.blogspot.com/2008/10/using-memcached-from-c.html

1
Nurhak Kaya

Si vous souhaitez exécuter un client memcached sous Windows, deux serveurs open source supplémentaires peuvent faire le travail. Les deux implémentent le protocole serveur memcached standard et sont écrits en Java afin qu'ils s'exécutent sur Windows.

0
Brent Matzelle