76 votes

Memcache vs memcached?

Je veux utiliser memcached

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

Je l'ai installé via yum install memcached

Mais maintenant j'ai besoin de me connecter à PHP, et il y a une extension appelée memcache et une nommée memcached? ARGH

https://www.php.net/manual/en/book.memcache.php
https://www.php.net/manual/en/book.memcached.php

Est-ce que quelqu'un pourrait me guider dans la bonne direction ici.. laquelle va fonctionner?

Aussi, dois-je ouvrir des ports pour que ça fonctionne même si c'est en local? Après l'avoir lancé, j'essaie telnet 127.0.0.1 11211 et j'obtiens une connexion refusée.

28 votes

Si vous regardez cette question maintenant, veuillez garder à l'esprit que la réponse acceptée est fausse. Choisir une solution basée uniquement sur le nom est dangereux, surtout lorsque celui avec le meilleur nom est un projet plus mauvais. Veuillez consulter les autres réponses pour plus d'informations.

0 votes

@thanksyo merci de décocher la réponse que vous avez sélectionnée. Cela va juste perturber davantage les personnes qui arriveront ici plus tard. En attendant, j'ai voté négativement la réponse incorrecte et je suggère aux autres d'en faire de même jusqu'à ce que thanksyo prenne le temps de la décocher.

0 votes

57voto

Nate Points 2296

Vous voulez probablement voir la Comparaison des clients PHP.

Version courte : Les deux fonctionneront, et dans la plupart des cas l'un ou l'autre fera parfaitement l'affaire.

Concernant l'autre problème : Oui, vous devriez être en mesure de faire telnet 127.0.0.1 11211. Très peu de pare-feu bloqueraient localhost de communiquer avec lui-même. Si vous n'êtes pas en mesure de vous connecter, vérifiez que memcached fonctionne vraiment en faisant ps auxwww | grep memcached, ce qui vous montrera également les arguments de ligne de commande utilisés pour démarrer memcached. Un des arguments devrait être -p 11211 ou un autre numéro de port. Voir man memcached pour la signification de tous les arguments possibles.

3 votes

Upvote pour avoir ajouté quelques étapes de dépannage.

0 votes

Il s'agit vraiment de la réponse claire.

0 votes

@Nate, Quel est l'équivalent Windows de ps auxwww | grep memcached?

28voto

David Pashley Points 22851

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 d'obtenir les meilleures performances de memcached. Le protocole binaire réduit la quantité de données à envoyer entre le client et le serveur. Les multigets et multisets vous permettent d'obtenir/définir plusieurs éléments en même temps. Si vous constatez que vous avez besoin de plus de puissance de memcache, memcached est le meilleur module. L'utilisation de libmemcached suggère que la bibliothèque elle-même est peut-être plus optimisée que la version PHP seule.

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

0 votes

Grande explication!

26voto

Jessica McKinnon Points 1503

La réponse courte : Les deux sont ce que vous recherchez, mais mon premier choix serait memcache (le premier que vous avez mentionné), simplement en raison de son utilisation correcte de la nomenclature.

Voici comment je suis arrivé à cette conclusion :

Voici un bref aperçu des conventions de nommage (pour ceux qui ne le savent pas), qui explique la frustration de la personne posant la question : Pour de nombreuses applications *nix, la pièce qui effectue le travail en arrière-plan est appelée un "daemon" (pensez à un "service" dans le monde Windows), tandis que l'interface ou l'application cliente est ce que vous utilisez pour contrôler ou accéder au daemon. Le daemon est le plus souvent nommé de la même manière que le client, avec la lettre "d" ajoutée. Par exemple "imap" serait un client qui se connecte au daemon "imapd".

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

Le module Memcache fournit une interface pratique procédurale et orientée objet vers memcached, un démon de mise en cache très efficace, 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 ici est causée par l'auteur de l'extension PHP qui a été mal nommée memcached, car elle partage le même nom que le véritable démon appelé memcached. Remarquez également que dans l'introduction à memcached (le module PHP), il est mentionné libmemcached, qui est la bibliothèque partagée (ou API) utilisée par le module pour accéder au démon memcached :

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

Cette extension utilise la bibliothèque libmemcached pour fournir une API permettant de communiquer avec les serveurs memcached. Elle 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 identiques, mais ils ont simplement des auteurs différents, et l'un est simplement mieux nommé que l'autre.

74 votes

Est-ce que le nom du projet est vraiment une raison appropriée pour choisir une implémentation plutôt qu'une autre ?

4 votes

David: Pas tout à fait ... mais c'est certainement une raison suffisante pour laisser une implémentation particulière jusqu'à la fin de mes tests, donnant ainsi préférence aux autres. Je vais probablement quand même essayer toutes les implémentations disponibles, mais des erreurs techniques dans les descriptions des logiciels par l'auteur me font souvent me demander quelles erreurs techniques peuvent se cacher dans le logiciel. J'ai lu votre commentaire néanmoins, à propos du logiciel réel, donc je vous ai donné un vote positif pour votre réponse aussi. :-)

4 votes

Je n'ai jamais pensé que le "d" dans memcached signifiait démon mais le participe passé du verbe cache. De plus, vous ne pouviez pas nommer la nouvelle interface "memcache" car il en existait déjà une avec ce nom.

23voto

tylerl Points 14785

L'ancien, plus bogué, est appelé php-memcache car cela semblait être le nom le plus approprié. La nouvelle version, meilleure et développée indépendamment par l'équipe de Digg, a plutôt été nommée php-memcached dans un souci de clarification.

Les personnes qui vous recommanderaient de choisir l'un plutôt que l'autre uniquement en fonction de la justesse du nom n'ont vraiment pas à donner de conseils techniques.

7voto

Ayant récemment utilisé php-memcache, je vous dirais de vous tourner vers php-memcached.

Voici quelques raisons qui me viennent à l'esprit...

1) Il n'y a pas de méthode getErrorCode() ou équivalent, donc si get() renvoie FALSE, vous n'aurez aucune idée si c'est parce que la valeur stockée dans memcache EST false, ou s'il y a eu un problème quelconque.

2) Son algorithme de hachage pour le hachage cohérent semble différer des autres implémentations, comme les nombreuses bibliothèques clientes basées sur libmemcached. Cela signifie que si vous voulez utiliser le même cluster memcache avec plusieurs langages, vous risquez d'avoir des problèmes où vous stockerez une valeur avec le client PHP, et les autres clients ne la trouveront pas.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X