memcache vs memcached?


76

Ich möchte memcached verwenden

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

Ich habe es durch installiert yum install memcached

Aber jetzt muss ich mich mit PHP verbinden und es gibt eine Erweiterung namens memcache und eine namens memcached? ARGH

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

Könnte mich hier jemand in die richtige Richtung weisen ... welches wird funktionieren?

Muss ich auch Ports öffnen, damit es funktioniert, obwohl es lokal ist? Nachdem ich es ausgeführt habe, versuche ich Telnet 127.0.0.1 11211 und bekomme eine Verbindung abgelehnt.


24
Wenn Sie sich diese Frage jetzt ansehen, bedenken Sie bitte, dass die akzeptierte Antwort falsch ist . Die Auswahl einer Lösung, die ausschließlich auf dem Namen basiert, ist gefährlich, insbesondere wenn es sich bei der Lösung mit dem besseren Namen um ein schlechteres Projekt handelt. Weitere Informationen finden Sie in den anderen Antworten.
tylerl

@ Dankeschön bitte deaktivieren Sie die Antwort, die Sie überprüft haben. Das wird nur mehr Leute verwirren, die spät hierher kommen. In der Zwischenzeit habe ich die falsche Antwort abgelehnt und anderen vorgeschlagen, dasselbe zu tun, bis Thanksyo herumkommt, um sie zu deaktivieren.
Joedevon

Antworten:


24

Die kurze Antwort: Entweder ist es das, wonach Sie suchen, aber meine erste Wahl wäre der Memcache (der erste, den Sie aufgelistet haben), der lediglich auf der korrekten Verwendung der Nomenklatur basiert.

Und so bin ich zu diesem Schluss gekommen:

Hier ist ein kurzer Hintergrund zu Benennungskonventionen (für Unbekannte), der die Frustration des Fragestellers erklärt: Für viele * nix-Anwendungen wird das Teil, das die Backend-Arbeit erledigt, als "Daemon" bezeichnet (denken Sie an "Service" in Windows). land), während Sie die Schnittstelle oder Client-Anwendung verwenden, um den Dämon zu steuern oder auf ihn zuzugreifen. Der Dämon wird am häufigsten als derselbe Client bezeichnet, an den der Buchstabe "d" angehängt ist. Zum Beispiel wäre "imap" ein Client, der eine Verbindung zum "imapd" -Daemon herstellt.

Diese Namenskonvention wird von memcache eindeutig eingehalten, wenn Sie die Einführung zum memcache-Modul lesen (beachten Sie den Unterschied zwischen memcache und memcached in diesem Auszug):

Das Memcache-Modul bietet eine praktische prozedurale und objektorientierte Schnittstelle zu einem in Memcaches gespeicherten, hocheffektiven Caching-Daemon, der speziell zur Reduzierung der Datenbanklast in dynamischen Webanwendungen entwickelt wurde.

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

Weitere Informationen zu memcached finden Sie unter » http://www.danga.com/memcached/ .

Die Frustration hier wird durch den Autor der PHP-Erweiterung verursacht, die falsch als memcached bezeichnet wurde , da sie denselben Namen wie der eigentliche Daemon mit dem Namen memcached hat . Beachten Sie auch , dass in der Einführung in Memcached (die PHP - Modul) , macht es erwähnt libmemcached , das ist die gemeinsame Bibliothek (oder API), die vom Modul verwendet wird , um das Memcached - Daemon zuzugreifen:

memcached ist ein leistungsfähiges Cachesystem für verteilte Speicherobjekte, das allgemeiner Natur ist, jedoch zur Beschleunigung dynamischer Webanwendungen durch Verringerung der Datenbanklast vorgesehen ist.

Diese Erweiterung verwendet die libmemcached-Bibliothek, um die API für die Kommunikation mit zwischengespeicherten Servern bereitzustellen. Es bietet auch einen Session-Handler (memcached).

Informationen zu libmemcached finden Sie unter » http://tangent.org/552/libmemcached.html .

Zusammenfassend ist festzuhalten, dass beide Funktionen identisch sind, dass sie jedoch unterschiedliche Autoren haben, und dass der eine einfach angemessener benannt wird als der andere.


70
Ist der Name des Projekts wirklich ein angemessener Grund, eine Implementierung der anderen vorzuziehen?
David Pashley

4
David: Nicht ganz ... aber es ist sicherlich ein Grund genug, eine bestimmte Implementierung bis zum letzten Mal in meinen Tests zu belassen und dabei den anderen effektiv den Vorzug zu geben. Ich würde höchstwahrscheinlich immer noch alle verfügbaren Implementierungen ausprobieren, aber technische Mängel in den Beschreibungen der Software des Autors lassen mich darüber nachdenken, welche technischen Mängel in der Software liegen können. Ich habe Ihren Kommentar über die eigentliche Software gelesen, also habe ich Sie auch für Ihre Antwort positiv bewertet. :-)
Jessica McKinnon

4
Ich hätte nie gedacht, dass das "d" in memcached Deamon bedeutet, sondern das Partizip der Vergangenheit des Verb-Cache. Außerdem konnte die neue Oberfläche nicht als "memcache" bezeichnet werden, da bereits eine mit diesem Namen vorhanden war.
GetFree

9
Die Anzahl der Fehler und ob die Erweiterung aktiv entwickelt wird oder nicht, ist viel wichtiger, als sich mit dem Problem auseinanderzusetzen. D. Im Ernst, Sie sollten nicht einmal darüber nachdenken, eine Erweiterung zum letzten Mal zu testen. Es ist völlig aus dem
Häuschen

12
Ähm, beide sind funktional nicht gleich: memcachedUnterstützt Cas-Token, zum Beispiel, memcachenicht. Wenn Sie diese brauchen, wissen Sie, welche (schlecht benannt oder nicht) Sie auswählen müssen.
Wrikken

56

Sie möchten wahrscheinlich den PHP-Client-Vergleich sehen .

Kurzfassung: Beide funktionieren, und in den meisten Fällen reicht beides völlig aus.

Zum anderen Thema: Ja, das sollten Sie können telnet 127.0.0.1 11211. Sehr wenige Firewalls würden localhost daran hindern, mit sich selbst zu kommunizieren. Wenn Sie keine Verbindung herstellen können, überprüfen Sie, ob memcached wirklich ausgeführt wird. Dies ps auxwww | grep memcachedzeigt Ihnen auch die Befehlszeilenargumente, die zum Starten von memcached verwendet wurden. Eines der Argumente sollte eine -p 11211andere Portnummer sein. Siehe man memcachedfür die Bedeutung aller möglichen Argumente.


2
Upvote für das Hinzufügen einiger Schritte zur Fehlerbehebung.
Jessica McKinnon

Das ist wirklich die klare Antwort.
Danidacar

@Nate, wovon ist das Windows-Äquivalent ps auxwww | grep memcached?
Pacerier

1
@Pacerier: Werfen Sie einen Blick auf superuser.com/questions/415360/... . Der Prozess-Explorer ist der einfachste Weg, einen laufenden Prozess zu finden und seine Befehlszeilenargumente anzuzeigen.
Nate

@Pacerier Dieser Befehl überprüft, ob der Serverprozess ausgeführt wird und wie er aufgerufen wurde.
Jasen

27

Wie der Link von Nate andeutet, eignen sich beide hervorragend für die einfache Verwendung. Memcached unterstützt jedoch mehr Funktionen, mit denen Sie das meiste aus memcached herausholen können. Das Binärprotokoll reduziert die Datenmenge, die zwischen Client und Server gesendet werden muss. Mit Multigets und Multisets können Sie mehrere Elemente gleichzeitig abrufen / festlegen. Wenn Sie feststellen, dass Sie mehr Speicherplatz aus dem Memcache benötigen, ist Memcached das bessere Modul. Die Verwendung von libmemcached lässt vermuten, dass die Bibliothek selbst möglicherweise optimierter 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 auf eine ältere Version von PHP abzielen müssen, können Sie nur Memcache wirklich verwenden.


Tolle Erklärung!
John

21

Der ältere, fehlerhaftere wird genannt, php-memcacheweil das der passendste Name schien. Die neuere, bessere Version, die von den Leuten bei Digg unabhängig entwickelt wurde, wurde stattdessen php-memcachedim Interesse der Disambiguierung benannt.

Personen, die empfehlen würden, nur aufgrund der Richtigkeit des Namens übereinander zu wählen, haben wirklich kein Geschäft, das technische Beratung anbietet.


6

Nachdem ich kürzlich PHP-Memcache verwendet habe, muss ich Sie auf PHP-Memcached verweisen.

Hier sind ein paar Gründe, die mir auf den Kopf gekommen sind.

1) Es gibt kein getErrorCode () oder eine gleichwertige Methode. Wenn get () also FALSE zurückgibt, wissen Sie nicht, ob der in memcache gespeicherte Wert falsch ist oder ob ein Problem aufgetreten ist.

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


3

Beide haben Probleme ab heute. PECL / memcache ist alt und zuverlässig, mit wenigen Ausnahmen, in denen es veraltet ist. PECL / memcached 1.x ist bestenfalls Beta. Einige Funktionen arbeiten nicht mit Zifferntasten. Bei Verwendung von dauerhaften Verbindungen treten Verbindungsverluste auf. Einige (alle?) Werden in GitHub behoben und irgendwann in 2.x veröffentlicht, aber nicht heute. Eine ausführlichere Übersicht finden Sie unter http://brian.moonspot.net/php-memcached-issues


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

2

Ich arbeite an einem Buch "Expert PHP and MySQL". Ich habe ziemlich genau das Gleiche über die Unterschiede geschrieben. Was ich empfohlen habe, war PECL / memcached. # 1 - Es handelt sich um eine gut funktionierende C-Bibliothek mit vollem Funktionsumfang. # 2 - Wird erst kürzlich gewartet. # 3 - mehr Funktionen. Keine Abwertung von PECL / Memcache.


0

Ich hatte einige ziemlich schwerwiegende Probleme mit Drupal 6 und php-pecl-memcached, bei denen die Antwortzeiten um bis zu 5 ms pro Anruf verzögert wurden und eine bestimmte Site dazu veranlasste, fünfmal mehr Anrufe als vor der Umstellung auf php-pecl-memcached zu tätigen . Das Wechseln zu php-pecl-memcache behebt alle Probleme. Latenz und zusätzliche Anrufe.

Diese Antwort soll nur denjenigen helfen, die Drupal 6 und möglicherweise Drupal 7 verwenden.


-3
  • memcache ist ein Client von memcached (der Server)
  • libmemcached ist auch ein Client zum Speichern

Es gibt auch andere Clients für memcached, siehe http://code.google.com/p/memcached/wiki/Clients

Aus dem Internet ausschneiden und einfügen:

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 "PHP-Erweiterung für die Schnittstelle mit über libmemcached gespeicherter Bibliothek" Diese Erweiterung verwendet die libmemcached-Bibliothek, um API für die Kommunikation mit zwischengespeicherten Servern bereitzustellen. https://github.com/andreiz/php-memcached

http://pecl.php.net/package/memcache "memcached extension" Memcached ist ein Caching-Daemon, der speziell für dynamische Webanwendungen entwickelt wurde, um die Datenbanklast durch Speichern von Objekten im Speicher zu verringern. Mit dieser Erweiterung können Sie über praktische OO- und prozedurale Schnittstellen mit Memcached arbeiten.

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

6
Diese langatmige Antwort ist nicht annähernd klar genug für das Plakat. Dem Poster ist bereits bekannt, dass es mehrere Kunden gibt. Wenn Sie sie auflisten und alternative Namen vorschlagen, ist es nicht einfacher, den richtigen auszuwählen.
Martijn Heemels
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.