web-dev-qa-db-fra.com

memcache vs memcached?

Je veux utiliser memcached

http://www.danga.com/memcached/

Je l'ai installé via yum install memcached

Mais maintenant, je dois me connecter à PHP, et il y a une extension nommée memcache et une nommée memcached? ARGH

http://us3.php.net/manual/en/book.memcache.php
http://us3.php.net/manual/en/book.memcached.php

Quelqu'un pourrait-il m'orienter dans la bonne direction ici ... lequel va fonctionner?

De plus, dois-je ouvrir des ports pour que cela fonctionne même s'il est local? Après l'avoir exécuté, j'essaie telnet 127.0.0.1 11211 et la connexion est refusée.

76
thanksyo

La réponse courte: L'un ou l'autre est ce que vous recherchez, mais mon premier choix serait memcache (le premier que vous avez listé), purement basé sur son utilisation correcte de la nomenclature.

Maintenant, voici comment je suis arrivé à cette conclusion:

Voici un bref aperçu des conventions de dénomination (pour ceux qui ne sont pas familiers), ce qui explique la frustration du demandeur: pour de nombreuses applications * nix, la pièce qui fait le travail de backend est appelée un "démon" (pensez "service" dans Windows- land), tandis que l'interface ou l'application client est ce que vous utilisez pour contrôler ou accéder au démon. Le démon porte le plus souvent le même nom que le client, avec la lettre "d" en annexe. Par exemple, "imap" serait un client qui se connecte au démon "imapd".

Cette convention de dénomination est clairement respectée par memcache lorsque vous lisez l'introduction du module memcache (notez la distinction entre memcache et memcached dans cet extrait):

Le module Memcache fournit une interface pratique procédurale et orientée objet au démon de mise en cache memcached, très efficace, qui a été spécialement conçu pour réduire la charge de la base de données dans les applications Web dynamiques.

Le module Memcache fournit également un gestionnaire de session (memcache).

Plus d'informations sur memcached peuvent être trouvées sur " http://www.danga.com/memcached/ .

La frustration est causée par l'auteur de l'extension PHP mal nommée memcached , car elle partage la même chose nom comme le démon réel appelé memcached . Notez également que dans ( introduction à memcached (le module php) , il fait mention de libmemcached , qui est la bibliothèque partagée (ou API) utilisée par le module pour accéder à la démon memcached:

memcached est un système de mise en cache d'objets de mémoire distribuée hautes performances, de nature générique, mais destiné à être utilisé pour accélérer les applications Web dynamiques en allégeant la charge de la base de données.

Cette extension utilise la bibliothèque libmemcached pour fournir une API pour communiquer avec les serveurs memcached. Il fournit également un gestionnaire de session (memcached).

Des informations sur libmemcached peuvent être trouvées sur " http://tangent.org/552/libmemcached.html .

En résumé, les deux sont fonctionnellement les mêmes, mais ils ont simplement des auteurs différents, et l'un est simplement nommé de manière plus appropriée que l'autre.

24
Jessica McKinnon

Vous voulez probablement voir le Comparaison des clients PHP .

Version courte: Ils fonctionneront tous les deux, et dans la plupart des cas, l'un ou l'autre fera très bien l'affaire.

Concernant l'autre problème: Oui, vous devriez pouvoir faire telnet 127.0.0.1 11211. Très peu de pare-feu empêcheraient l'hôte local de communiquer avec lui-même. Si vous ne parvenez pas à vous connecter, vérifiez que memcached fonctionne vraiment en faisant ps auxwww | grep memcached, qui vous montrera également les arguments de ligne de commande utilisés pour démarrer memcached. L'un des arguments doit être -p 11211 ou un autre numéro de port. Voir man memcached pour la signification de tous les arguments possibles.

57
Nate

Comme le suggère le lien de Nate, les deux fonctionnent parfaitement bien pour une utilisation simple. Cependant, memcached prend en charge plus de fonctionnalités qui vous permettent de tirer le meilleur parti de memcached. Le protocole binaire réduit la quantité de données à envoyer entre le client et le serveur. Les multigets et les multisets vous permettent d'obtenir/définir plusieurs éléments en même temps. Si vous trouvez que vous avez besoin de plus de punch pour memcache, memcached est le meilleur module. L'utilisation de libmemcached suggère que la bibliothèque elle-même est probablement plus optimisée que la version PHP uniquement.

Memcached est un module plus récent par rapport à memcache, ayant seulement été publié il y a 8 mois. Si vous avez besoin de cibler une ancienne version de PHP, vous ne pouvez vraiment utiliser memcache.

28
David Pashley

Le plus ancien et le plus bogué s'appelle php-memcache parce que cela semblait le nom le plus approprié. La version plus récente et meilleure développée indépendamment par les gens de Digg a plutôt été nommée php-memcached dans un souci de désambiguïsation.

Les gens qui vous recommanderaient de choisir l'un plutôt que l'autre en se basant uniquement sur l'exactitude du nom n'ont vraiment aucune entreprise à offrir des conseils techniques.

21
tylerl

Ayant utilisé php-memcache récemment, je dois vous indiquer php-memcached.

Voici quelques raisons qui me viennent à l'esprit.

1) Il n'y a pas de méthode getErrorCode () ou équivalente, donc si get () retourne FALSE, vous n'aurez aucune idée si c'est parce que la valeur stockée dans memcache IS false, ou s'il y avait un question de quelque sorte.

2) Son algorithme de hachage pour un hachage cohérent semble différer des autres implémentations, telles que les nombreuses bibliothèques clientes construites à partir de libmemcached. Cela signifie que si vous souhaitez utiliser le même cluster memcache avec plusieurs langues, vous aurez probablement des problèmes où vous stockerez une valeur avec le client PHP, et d'autres clients ne le trouveront pas .

6
user25576

Les deux ont des problèmes à ce jour. PECL/memcache est ancien et fiable, à quelques exceptions près où il est obsolète. PECL/memcached 1.x est au mieux bêta. Certaines fonctions ne traitent pas avec les touches numériques, il fuit les connexions lors de l'utilisation de connexions persistantes. Certains (tous?) Sont corrigés dans GitHub et seront publiés à un moment donné dans 2.x, mais pas aujourd'hui. Pour un examen plus détaillé, voir http://brian.moonspot.net/php-memcached-issues

3
Brian Moon

Je travaille sur un livre "Expert PHP et MySQL". J'ai écrit à peu près la même chose sur les différences. Ce que j'ai recommandé était PECL/memcached. # 1 - il s'enroule autour d'un -fonctionnalité bibliothèque C # 2 performante - elle est plus récemment maintenue. # 3 - plus de fonctionnalités. Pas de dénigrement pour PECL/memcache.

2
CaptTofu

J'ai eu quelques problèmes assez graves avec Drupal 6 et php-pecl-memcached dans lesquels les temps de réponse étaient retardés jusqu'à 5 ms par appel et provoquaient un site particulier à créer 5 fois plus d'appels que avant le passage à php-pecl-memcached. Le passage à php-pecl-memcache a résolu tous les problèmes: latence et appels supplémentaires.

Cette réponse est uniquement destinée à aider ceux qui utilisent Drupal 6 et éventuellement Drupal 7.

0
Spechal