Quand dois-je utiliser Memcache au lieu de Memcached?

321

Il semble que PHP possède deux bibliothèques memcached nommées memcache et memcached . Quelle est la différence et comment savez-vous lequel utiliser? Un est-il dépassé? Il semble que memcached offre plus de méthodes, donc je suppose que cela signifie qu'il a eu le plus de développement - mais il semble également nécessiter des bibliothèques C / C ++ externes, donc je ne suis pas sûr de pouvoir l'installer.

Il semble que memcache existe depuis plus longtemps, ne nécessite pas de bibliothèques supplémentaires et a des binaires précompilés pour même les fenêtres! Je pense que ce serait le meilleur choix pour l'instant. Cependant, étant nouveau sur memcached (serveur), je ne sais pas s'il y a des fonctionnalités super importantes dans memcached (php) qui valent la peine d'être dérangées.

Xeoncross
la source
1
ZendCon a un bel épisode comparant les deux. ZendCon Sessions Episode 040: Memcached: la meilleure interface Memcache
John Magnolia
doublon de serverfault.com/questions/63383/memcache-vs-memcached en quelques jours, mais cela a obtenu plus de vues et de votes :)
Stefano

Réponses:

249

La bibliothèque cliente Memcached a récemment été publiée comme stable. Il est utilisé par digg (a été développé pour digg par Andrei Zmievski, maintenant plus avec digg) et implémente beaucoup plus le protocole memcached que l'ancien client memcache. Les fonctionnalités les plus importantes de Memcached sont:

  1. Jetons Cas . Cela m'a rendu la vie beaucoup plus facile et c'est un système préventif facile pour les données périmées. Chaque fois que vous retirez quelque chose du cache, vous pouvez recevoir avec lui un jeton CAS (un double numéro). Vous pouvez ensuite utiliser ce jeton pour enregistrer votre objet mis à jour. Si personne d'autre n'a mis à jour la valeur pendant l'exécution de votre thread, le swap réussira. Sinon, un nouveau jeton CAS a été créé et vous êtes obligé de recharger les données et de les enregistrer à nouveau avec le nouveau jeton.
  2. Les rappels lus sont la meilleure chose depuis le pain tranché. Cela a simplifié une grande partie de mon code.
  3. getDelayed () est une fonctionnalité intéressante qui peut réduire le temps que votre script doit attendre pour que les résultats reviennent du serveur.
  4. Bien que le serveur memcached soit censé être très stable, il n'est pas le plus rapide. Vous pouvez utiliser le protocole binaire au lieu de ASCII avec le nouveau client.
  5. Chaque fois que vous enregistrez des données complexes dans memcached, le client faisait toujours la sérialisation de la valeur (ce qui est lent), mais maintenant avec le client memcached, vous avez la possibilité d'utiliser igbinary . Jusqu'à présent, je n'ai pas eu la chance de tester l'ampleur d'un gain de performances.

Tous ces points m'ont suffi pour passer au client le plus récent et peuvent vous dire que cela fonctionne comme un charme. Il y a cette dépendance externe à la bibliothèque libmemcached , mais ont quand même réussi à l'installer sur Ubuntu et Mac OSX, donc pas de problème jusqu'à présent.

Si vous décidez de mettre à jour vers la bibliothèque la plus récente, je vous suggère de mettre à jour vers la dernière version du serveur ainsi que de belles fonctionnalités. Vous devrez installer libevent pour qu'il se compile, mais sur Ubuntu, cela n'a pas posé beaucoup de problèmes.

Jusqu'à présent, je n'ai vu aucun framework prendre en charge le nouveau client memcached (bien que je n'en garde pas la trace), mais je suppose que Zend sera bientôt intégré.

METTRE À JOUR

Zend Framework 2 dispose d'un adaptateur pour Memcached qui peut être trouvé ici

Miha Hribar
la source
1
Excellente réponse; de plus, la dépendance externe à libmemcached est en fait un plus, dans ce cas, car c'est l'un des clients les plus développés.
Marc Bollinger
D'accord. La dépendance externe libmemcached ne doit en aucun cas être considérée comme un problème, tout comme libevent.
Miha Hribar
1
Cette chose Cas Tokens sonne comme le plus gros plus. En fait, en examinant ces fonctionnalités, il semble presque que memcached se dirige davantage vers un conteneur de données géré, comme une base de données, et moins comme un cache temporaire.
Xeoncross
Si vous recherchez cela, vous avez déjà memcachedb ( memcachedb.org ) qui est en fait juste une base de données Berkley qui parle le protocole memcached.
Miha Hribar
8
cette réponse ne fait même pas la différence entre memcache et memcached?! memcache est-il juste l'ancienne version de memcached?
Daniel W.
10

Lorsque vous utilisez Windows, la comparaison est abrégée: memcachesemble être le seul client disponible.

rymo
la source
Ne pourriez-vous pas toujours ajouter l' memcachedextension en vous-même?
Pacerier
1
Il ne semble pas que ce soit vrai. commaster.net/content/installing-memcached-windows
Joe Leonard
@JoeLeonard à partir de la page vers laquelle vous créez un lien: "Pour interfacer avec memcachedPHP, vous devez installer l' memcacheextension pour PHP"
rymo
8

Nous sommes en 2013. Oubliez les commentaires de 2009. De même, si vous exécutez de lourdes charges de trafic, ne pensez même pas à faire avec un memcache basé sur Windows. Lorsqu'il s'agit d'une très grande échelle (plus de 500 serveurs Web frontaux) et de plus de 20 serveurs de bases de données et réplicants principaux (mélange mysql et mssql), une batterie de serveurs memcached (12 serveurs dans le groupe) prend en charge plusieurs applications OLTP à volume élevé répondant à 25 000 ~ 40K mc-> recevoir des appels par seconde. Ces appels sont ceux qui ne doivent PAS atteindre une base de données.

À mon humble avis, cette utilisation de memcached a fourni de GRAVES $$$, des économies sur les CAPEX pour les nouveaux serveurs et licences DB ainsi que sur les contrats de support pour les grandes conceptions commerciales.

Mike Trest
la source
48
Comment cela répond-il à la question sur les différences entre ces 2 implémentations du protocole memcache en php?
Marki555
9
Cela devrait être un commentaire.
Elijah Lynn
7

Memcached est une API plus récente, il fournit également memcached en tant que fournisseur de session, ce qui pourrait être idéal si vous avez une batterie de serveurs.

Après la version est toujours vraiment faible 0,2 mais j'ai utilisé les deux et je n'ai pas rencontré de problème majeur, donc j'irais dans memcached car c'est nouveau.

RageZ
la source
1
Les deux fonctionnent en fait comme gestionnaires de session, même si je ne voudrais jamais les utiliser pour cela. us3.php.net/manual/en/memcache.examples-overview.php
Xeoncross
bon attrape mon mauvais, ouais c'est vraiment vraiment utile sur un gros serveur quand io devient vraiment important, plus memcache ne valide pas qu'il ne laissera pas tomber un objet pour obtenir de la mémoire si difficile de savoir comment faire évoluer les choses.
RageZ
1
La version 0.2 a depuis été dépassée par une version 1.0.0 stable.
Miha Hribar