memcache vs memcached?

76

Je veux utiliser memcached

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

Je l'ai installé à travers yum install memcached

Mais maintenant je dois me connecter à PHP, et il y a une extension nommée memcache et une autre 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 me diriger dans la bonne direction ici .. lequel va travailler?

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

Thanksyo
la source
24
Si vous examinez cette question maintenant, n'oubliez pas que la réponse acceptée est fausse . Choisir une solution basée uniquement sur le nom est dangereux, en particulier lorsque celui qui porte le meilleur nom est un projet pire. Veuillez regarder les autres réponses pour plus d'informations.
Tylerl
@thanksyo s'il vous plaît décochez la réponse que vous avez cochée. Cela ne fera que dérouter plus de gens qui arriveront tard. En attendant, j'ai voté contre la mauvaise réponse et ai suggéré aux autres de faire de même jusqu'à ce que thanksyo se décide à la décocher.
Joedevon

Réponses:

24

La réponse courte: l’un ou l’autre correspond à ce que vous recherchez, mais mon premier choix serait le memcache (le premier que vous avez énuméré), uniquement en raison de son utilisation correcte de la nomenclature.

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

Voici un rapide aperçu des conventions de dénomination (pour les inconnus), ce qui explique la frustration du questionneur: Pour de nombreuses applications * nix, la partie effectuant le travail de fond est appelée "démon" (pensez "service" dans Windows). vous utilisez l’interface ou l’application cliente pour contrôler ou accéder au démon. Le démon porte le plus souvent le même nom que le client, auquel est ajoutée la lettre "d". Par exemple, "imap" serait un client qui se connecte au démon "imapd".

Il est clair que memcache adhère à cette convention de dénomination lorsque vous lisez l' introduction du module memcache (remarquez la distinction entre memcache et memcached dans cet extrait):

Le module Memcache fournit une interface pratique orientée objet et procédurale au démon de mise en cache memcached, extrêmement 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 sont disponibles sur » http://www.danga.com/memcached/ .

La frustration ici est causée par l'auteur de l'extension PHP mal nommée memcached , puisqu'elle partage le même nom que le démon réel appelé memcached . Notez également que dans l' introduction de memcached (le module php) , il est fait mention de 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 à mémoire distribuée hautes performances, de nature générique, mais destiné à 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 permettant de communiquer avec les serveurs memcached. Il fournit également un gestionnaire de session (memcached).

Des informations sur libmemcached sont disponibles 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 nommé de manière plus appropriée que l'autre.

Jessica McKinnon
la source
70
Le nom du projet est-il vraiment une raison appropriée pour choisir une mise en œuvre plutôt qu'une autre?
David Pashley
4
David: Pas tout à fait ... mais c'est certainement une raison suffisante pour laisser une mise en œuvre particulière jusqu'à la dernière de mes tests, donnant ainsi la préférence à la (aux) autre (s). J'essaierais probablement encore toutes les implémentations disponibles, mais des failles techniques dans les descriptions de logiciels par l'auteur m'amènent à me demander quelles sont les failles techniques du logiciel. J'ai lu votre commentaire sur le logiciel, alors je vous ai donné un vote positif pour votre réponse. :-)
Jessica McKinnon le
4
Je n'ai jamais pensé que le "d" dans memcached voulait dire démon mais signifier le participe passé du cache des verbes. De plus, vous ne pouviez pas nommer la nouvelle interface comme "memcache" puisqu'il en existait déjà une avec ce nom.
GetFree
9
La quantité de bugs et si l'extension est activement développée est tellement plus importante que de se contenter de la problématique d. Sérieusement, vous ne devriez même pas penser à tester une dernière extension à cause de quelque chose comme ça, c'est tout à fait
ça
12
Euh, les deux ne sont pas fonctionnellement identiques: memcachedsupporte les jetons cas par exemple, memcachene le fait pas. Si vous en avez besoin, vous savez lequel (mal nommé ou non) choisir.
Wrikken le
56

Vous voulez probablement voir la comparaison de client PHP .

Version courte: Ils fonctionneront tous les deux et, dans la plupart des cas, l’un ou l’autre suffira.

Concernant l’autre question: oui, vous devriez pouvoir le faire telnet 127.0.0.1 11211. Très peu de pare-feu empêcheraient localhost de communiquer avec lui-même. Si vous ne parvenez pas à vous connecter, vérifiez que memcached s'exécute réellement ps auxwww | grep memcached, ce qui vous indiquera également les arguments de ligne de commande utilisés pour démarrer memcached. L'un des arguments doit être -p 11211ou un autre numéro de port. Voir man memcachedpour le sens de tous les arguments possibles.

Nate
la source
2
Vote positif pour l'ajout de certaines étapes de dépannage.
Jessica McKinnon
C'est vraiment la réponse claire.
danidacar
@Nate, quel est l'équivalent Windows de ps auxwww | grep memcached?
Pacerier
1
@Pacerier: jetez un coup d'œil à superuser.com/questions/415360/… . Process Explorer est le moyen le plus simple de rechercher un processus en cours d'exécution et de consulter ses arguments de ligne de commande.
Nate
@Pacerier cette commande vérifiant si le processus serveur est en cours d'exécution et voir comment il a été appelé.
Jasen
27

Comme le suggère le lien de Nate, les deux fonctionnent parfaitement pour une utilisation simple. Toutefois, memcached prend en charge davantage de fonctionnalités vous permettant d’obtenir le maximum de 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 pensez que vous avez besoin de plus de punch hors 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 uniquement PHP.

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

David Pashley
la source
Grande explication!
john
21

Le plus vieux, buggier est appelé php-memcacheparce que cela semblait le nom le plus approprié. La nouvelle version, meilleure version développée indépendamment par les gens de Digg a plutôt été nommée php-memcacheddans l’intérêt de la désambiguïsation.

Les personnes 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 activité à offrir des conseils techniques.

tylerl
la source
6

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

Voici quelques raisons qui me viennent à l’esprit.

1) Il n'y a pas de méthode getErrorCode () ou équivalente. Par conséquent, si get () renvoie FALSE, vous ne saurez pas si cela est dû au fait que la valeur stockée dans memcache est false ou s'il existe un problème quelconque.

2) Son algorithme de hachage pour un hachage cohérent semble différer d'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 pour stocker une valeur avec le client PHP et que les autres clients ne la trouveront pas.


la source
3

Les deux ont des problèmes à partir d'aujourd'hui. PECL / memcache est vieux et fiable, à quelques exceptions près où il est périmé. PECL / memcached 1.x est au mieux bêta. Certaines fonctions ne traitent pas les clés numériques, il fuit les connexions lors de l’utilisation de connexions persistantes. Certains (tous?) Sont en cours de réparation 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

Brian Moon
la source
PECL / memcached 1.x est maintenant stable; PECL / memcache 2.x est limité; PECL / memcache 3.x est très instable.
Aredridel
2

Je travaille sur un livre "Expert PHP and MySQL". J'ai écrit à peu près la même chose à propos des différences. Ce que j'ai recommandé était PECL / memcached. N ° 1 - il s’articule autour d’une bibliothèque C performante et complète # 2 - il a été mis à jour plus récemment. # 3 - plus de fonctionnalités. Pas de dénigrement pour PECL / memcache.


la source
0

J'ai eu quelques problèmes assez graves avec Drupal 6 et php-pecl-memcached dans lesquels les temps de réponse ont été retardés jusqu'à 5 ms par appel et ont poussé un site particulier à créer 5x plus d'appels qu'avant le changement de php-pecl-memcached . Passer à php-pecl-memcache a résolu tous les problèmes. latence et appels supplémentaires.

Cette réponse est uniquement destinée à aider les utilisateurs de Drupal 6 et éventuellement de Drupal 7.

Spechal
la source
-3
  • memcache est un client de memcached (le serveur)
  • libmemcached est aussi un client à memcached

Et il existe d'autres clients pour memcached, voir http://code.google.com/p/memcached/wiki/Clients

Couper et coller depuis le web:

http://www.php.net/manual/en/intro.memcache.php

  Memcache module provides handy procedural and object oriented 
  interface to memcached, highly effective caching daemon, which was 
  especially designed to decrease database load in dynamic web applications.
The Memcache module also provides a session handler (memcache).
More information about memcached can be found at » www.memcached.org 

http://www.php.net/manual/en/intro.memcached.php

   » memcached (http://www_memcached_org/) is a high-performance, distributed 
  memory object caching system, generic in nature, but intended for use in 
  speeding up dynamic web applications by alleviating database load.
  This extension uses libmemcached library to provide API for communicating with
  memcached servers. It also provides a session handler (memcached).
  Information about libmemcached can be found at 
   » tangent.org/552/libmemcached.html

http://pecl.php.net/package/memcached "Extension PHP pour l'interfaçage avec memcached via la bibliothèque libmemcached" Cette extension utilise la bibliothèque libmemcached pour fournir une API permettant de communiquer avec des serveurs memcached. https://github.com/andreiz/php-memcached

http://pecl.php.net/package/memcache "extension memcached" Memcached est un démon de mise en cache conçu spécialement pour les applications Web dynamiques afin de réduire la charge de la base de données en stockant les objets en mémoire. Cette extension vous permet de travailler avec memcached via des interfaces OO et procédurales pratiques.

http://code.google.com/p/memcached/wiki/PHPClientComparison

                        pecl/memcache      pecl/memcached
  First Release Date      2004-06-08         2009-01-29 (beta)
  Actively Developed?     Yes                    Yes
  External Dependency     None              libmemcached
utilisateur62392
la source
6
Cette réponse interminable n'arrive même pas à clarifier les choses pour l'affiche. L'affiche sait déjà qu'il y a plusieurs clients. Les lister, et proposer des noms alternatifs, ne facilite pas le choix du bon.
Martijn Heemels le