Frage Memcache vs Memcached?


Ich möchte Memcached verwenden

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

Ich habe es installiert yum install memcached

Aber jetzt muss ich eine Verbindung zu PHP herstellen, und es gibt eine Erweiterung namens memcache und eine namens memcached? ARGH

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

Könnte mir hier jemand in die richtige Richtung zeigen ... welcher wird arbeiten?

Muss ich auch alle Ports öffnen, damit es funktioniert, obwohl es lokal ist? Nach dem Ausführen versuche ich Telnet 127.0.0.1 11211 und ich bekomme Verbindung abgelehnt.


71
2017-09-08 15:27


Ursprung


Wenn Sie diese Frage jetzt betrachten, beachten Sie bitte, dass die angenommene Antwort ist falsch. Es ist gefährlich, eine Lösung zu wählen, die nur auf dem Namen basiert, besonders wenn der Name mit dem besseren Namen ein schlechteres Projekt ist. Bitte sehen Sie sich die anderen Antworten für weitere Informationen an. - tylerl
@ thanksyo bitte deaktivieren Sie die Antwort, die Sie überprüft haben. Das wird nur mehr Leute verwirren, die zu spät kommen. In der Zwischenzeit habe ich die falsche Antwort heruntergeregelt und vorgeschlagen, dass andere dasselbe tun, bis ich danke, dass ich es entmarke. - joedevon
Ebenfalls stackoverflow.com/q/1442411/632951 - Pacerier


Antworten:


Die kurze Antwort: Entweder man ist, was Sie suchen, aber meine erste Wahl wäre Memcache (der erste, den Sie aufgelistet haben), rein basierend auf seiner korrekten Verwendung der Nomenklatur.

Jetzt bin ich zu dieser Schlussfolgerung gekommen:

Hier ein kurzer Überblick über Benennungskonventionen (für diejenigen, die nicht vertraut sind), was die Frustration durch den Fragesteller erklärt: Für viele * nix-Anwendungen wird der Teil, der die Backend-Arbeit erledigt, als "Daemon" bezeichnet. Land), während Sie mit der Schnittstelle oder Client-Anwendung den Daemon steuern oder auf ihn zugreifen. Der Daemon wird am häufigsten mit dem Namen des Clients und dem angehängten Buchstaben "d" benannt. Zum Beispiel wäre "imap" ein Client, der sich mit dem Daemon "imapd" verbindet.

Diese Namenskonvention wird eindeutig eingehalten von Memcache wenn du das liest Einführung in das Memcache-Modul (Beachten Sie die Unterscheidung zwischen Memcache und Memcached in diesem Auszug):

Memcache-Modul bietet praktische   prozedural und objektorientiert   Schnittstelle zu Memcached, hoch   effektiver Caching-Daemon, der war   besonders entworfen, um zu verringern   Datenbankbelastung im dynamischen Web   Anwendungen.

Das Memcache-Modul bietet auch eine   Session-Handler (Memcache).

Weitere Informationen über Memcached können   gefunden werden bei »    http://www.danga.com/memcached/.

Die Frustration hier wird durch den Autor der PHP-Erweiterung verursacht, die schlecht benannt wurde Memcached, da es den gleichen Namen wie der eigentliche Daemon hat Memcached. Beachten Sie auch, dass in der Einführung in Memcached (das PHP-Modul)es erwähnt libmemcachedDies ist die gemeinsam genutzte Bibliothek (oder API), die vom Modul für den Zugriff auf den Memcached-Daemon verwendet wird:

Memcached ist eine leistungsstarke,   verteiltes Speicherobjekt-Caching   System, generisch in der Natur, aber   zur Beschleunigung vorgesehen   dynamische Webanwendungen von   Linderung der Datenbankbelastung.

Diese Erweiterung verwendet libmemcached   Bibliothek zum Bereitstellen von API für   Kommunikation mit memcached Servern.   Es bietet auch einen Session-Handler   (memcached).

Informationen über libmemcached können sein   gefunden am "    http://tangent.org/552/libmemcached.html.

Zusammenfassend sind beide funktional gleich, aber sie haben einfach verschiedene Autoren, und der eine wird einfach passender benannt als der andere.


24
2017-09-08 16:16



Ist der Name des Projekts wirklich ein geeigneter Grund, eine Implementierung der anderen vorzuziehen? - David Pashley
David: Nicht ganz ... aber es ist sicherlich genug Grund, eine bestimmte Implementierung bis zum letzten Test zu belassen, wodurch die anderen effektiv bevorzugt werden. Ich würde höchstwahrscheinlich noch alle verfügbaren Implementierungen ausprobieren, aber technische Fehler in den Beschreibungen der Software durch den Autor neigen dazu, mich dazu zu bringen, mich darüber zu wundern, welche technischen Fehler in der Software liegen können. Ich habe jedoch Ihren Kommentar über die aktuelle Software gelesen, daher habe ich Ihnen eine Antwort für Ihre Antwort gegeben. :-) - Jessica McKinnon
Ich hätte nie gedacht, dass das "d" in memcached Deamon bedeutet, sondern das Partizip Perfekt des Verbcaches. Außerdem konnte man die neue Schnittstelle nicht als "Memcache" bezeichnen, da es bereits eine mit diesem Namen gab. - GetFree
Die Anzahl der Fehler und ob die Erweiterung aktiv ist oder nicht, ist so viel mehr wichtig als anal über die Problematik zu sein d. Im Ernst, Sie sollten nicht einmal darüber nachdenken, eine Erweiterung zu testen, weil es so etwas ist - Fake51
Ähm, beides sind nicht funktionell gleich: memcached unterstützt Cas-Tokens zum Beispiel, memcache nicht. Wenn Sie diese benötigen, wissen Sie, welche (schlecht benannt oder nicht) auszuwählen. - Wrikken


Du willst wahrscheinlich das sehen PHP-Client-Vergleich.

Kurzfassung: Sie werden beide arbeiten, und in den meisten Fällen wird beides gut funktionieren.

In Bezug auf das andere Thema: Ja, Sie sollten in der Lage sein zu tun telnet 127.0.0.1 11211. Sehr wenige Firewalls würden localhost davon abhalten, mit sich selbst zu kommunizieren. Wenn Sie keine Verbindung herstellen können, überprüfen Sie, ob memcached tatsächlich ausgeführt wird ps auxwww | grep memcached, die Ihnen auch die zum Starten von memcached verwendeten Befehlszeilenargumente zeigt. Eines der Argumente sollte sein -p 11211 oder eine andere Portnummer. Sehen man memcached für die Bedeutung aller möglichen Argumente.


55
2017-09-08 16:08



Upvote zum Hinzufügen einiger Fehlerbehebungsschritte. - Jessica McKinnon
Das ist wirklich die klare Antwort. - danidacar
@Nate, Was ist das Windows-Äquivalent von ps auxwww | grep memcached? - Pacerier
@ Pacerier: Schau dir das an superuser.com/questions/415360/.... Process Explorer ist der einfachste Weg, einen laufenden Prozess zu finden und seine Befehlszeilenargumente zu sehen. - Nate
@Pacerier dieser Befehl überprüft, ob der Serverprozess ausgeführt wird und wie er aufgerufen wurde. - Jasen


Wie der Link von Nate andeutet, funktionieren beide sehr gut für die einfache Verwendung. Memcached unterstützt jedoch mehr Funktionen, mit denen Sie Memcaches optimal nutzen können. Das Binärprotokoll reduziert die Menge der Daten, die zwischen Client und Server gesendet werden müssen. Mit Multigets und Multisets können Sie mehrere Objekte gleichzeitig abrufen / setzen. Wenn Sie feststellen, dass Sie mehr aus dem Memcache herausholen müssen, ist memcached das bessere Modul. Die Verwendung von libmemcached legt nahe, dass die Bibliothek selbst möglicherweise mehr optimiert ist als die reine PHP-Version.

Memcached ist ein neueres Modul im Vergleich zu Memcache, das erst vor 8 Monaten veröffentlicht wurde. Wenn Sie eine ältere Version von PHP als Ziel verwenden möchten, können Sie nur Memcache verwenden.


27
2017-09-08 17:56



Tolle Erklärung! - john


Der ältere, bugger ist aufgerufen php-memcache weil das der passendste Name schien. Die neuere, bessere Version, die unabhängig von den Leuten bei Digg entwickelt wurde, wurde stattdessen genannt php-memcached im Interesse der Disambiguierung.

Leute, die Ihnen empfehlen würden, sich nur auf die Korrektheit des Namens zu stützen, haben wirklich kein Geschäft, das technische Beratung anbietet.


21
2017-08-24 04:15





In Bezug auf diese Frage ist hier die richtige Antwort: http://about.digg.com/blog/new-pecl-extension-libmemcached-released


7
2017-08-24 01:17





Wenn ich kürzlich php-memcache benutzt habe, müsste ich Sie auf php-memcached hinweisen.

Hier sind ein paar Gründe aus meinem Kopf ..

1) Es gibt keine Methode getErrorCode () oder eine äquivalente Methode. Wenn also get () FALSE zurückgibt, haben Sie keine Ahnung, ob der Wert in Memcache falsch ist oder ob ein Problem aufgetreten ist.

2) Der Hashing-Algorithmus für konsistentes Hashing scheint sich von anderen Implementierungen zu unterscheiden, wie beispielsweise die vielen Client-Bibliotheken, die aus libmemcached bestehen. Wenn Sie also denselben Memcache-Cluster mit mehreren Sprachen verwenden möchten, haben Sie wahrscheinlich Probleme, bei denen Sie einen Wert mit dem PHP-Client speichern und andere Clients ihn nicht finden.


6
2017-11-09 21:08





Beide haben ab heute Probleme. PECL / memcache ist alt und zuverlässig, mit einigen Ausnahmen, wo es veraltet ist. PECL / memcached 1.x ist bestenfalls Beta. Einige Funktionen befassen sich nicht mit numerischen Schlüsseln, sie verlieren Verbindungen, wenn persistente Verbindungen verwendet werden. Einige (alle?) Werden in GitHub repariert und werden irgendwann in 2.x veröffentlicht, aber nicht heute. Für eine ausführlichere Überprüfung siehe http://brian.moonspot.net/php-memcached-issues


3
2018-06-24 17:26



PECL / memcached 1.x ist jetzt stabil; PECL / memcache 2.x ist begrenzt; PECL / memcache 3.x ist sehr instabil. - aredridel


Ich arbeite an einem Buch "Expert PHP and MySQL". Ähnliches habe ich über die Unterschiede geschrieben. Was ich empfohlen habe, war PECL / memcached. # 1 - es umschließt eine voll funktionsfähige, gut funktionierende C-Bibliothek # 2 - sie wird in letzter Zeit gepflegt. # 3 - mehr Funktionen. Keine Herabwürdigung gegenüber PECL / Memcache.


2
2017-12-02 15:21