Wann sollte ich Memcache anstelle von Memcached verwenden?


321

Es scheint, dass PHP zwei zwischengespeicherte Bibliotheken mit den Namen memcache und memcached hat . Was ist der Unterschied und woher weißt du, welchen du verwenden sollst? Ist man veraltet? Es scheint, dass memcached mehr Methoden bietet, daher würde ich davon ausgehen, dass es die meiste Entwicklung hatte - aber es scheint auch externe C / C ++ - Bibliotheken zu erfordern, sodass ich nicht sicher bin, ob ich es installieren kann.

Es scheint, dass Memcache schon länger existiert, keine zusätzlichen Bibliotheken benötigt und vorkompilierte Binärdateien für sogar Windows hat! Ich würde denken, dass es vorerst die bessere Wahl wäre. Da ich neu bei memcached (Server) bin, bin ich mir nicht sicher, ob es einige super wichtige Funktionen in memcached (php) gibt, die den zusätzlichen Aufwand wert machen.


1
ZendCon hat eine schöne Folge, in der beide verglichen werden. ZendCon Sessions Episode 040: Memcached: die bessere Memcache-Oberfläche
John Magnolia

Duplikat von serverfault.com/questions/63383/memcache-vs-memcached von nur wenigen Tagen, aber dies bekam mehr Ansichten und Stimmen :)
Stefano

Antworten:


249

Memcached Client Library wurde erst kürzlich als stabil veröffentlicht. Es wird von digg verwendet (wurde von Andrei Zmievski für digg entwickelt, jetzt nicht mehr mit digg) und implementiert viel mehr des memcached-Protokolls als der ältere memcache-Client. Die wichtigsten Funktionen von memcached sind:

  1. Cas Token . Dies hat mein Leben viel einfacher gemacht und ist ein einfaches Präventionssystem für veraltete Daten. Wann immer Sie etwas aus dem Cache ziehen, können Sie damit einen cas-Token (eine doppelte Zahl) erhalten. Sie können dieses Token dann verwenden, um Ihr aktualisiertes Objekt zu speichern. Wenn niemand den Wert aktualisiert hat, während Ihr Thread ausgeführt wurde, ist der Austausch erfolgreich. Andernfalls wurde ein neueres cas-Token erstellt und Sie müssen die Daten neu laden und erneut mit dem neuen Token speichern.
  2. Lesen durch Rückrufe ist das Beste , was seit geschnittenem Brot. Es hat einen Großteil meines Codes vereinfacht.
  3. getDelayed () ist eine nette Funktion, die die Zeit verkürzen kann, die Ihr Skript warten muss, bis die Ergebnisse vom Server zurückkommen.
  4. Der Memcached Server soll zwar sehr stabil sein, ist aber nicht der schnellste. Sie können mit dem neueren Client anstelle von ASCII ein Binärprotokoll verwenden.
  5. Wenn Sie komplexe Daten in memcached speichern, hat der Client immer die Serialisierung des Werts durchgeführt (was langsam ist), aber jetzt haben Sie mit memcached client die Option, igbinary zu verwenden . Bisher hatte ich noch keine Gelegenheit zu testen, wie viel Leistungsgewinn dies sein kann.

All diese Punkte haben mir gereicht, um zum neuesten Kunden zu wechseln, und ich kann Ihnen sagen, dass es wie ein Zauber funktioniert. Es gibt diese externe Abhängigkeit von der libmemcached- Bibliothek, aber es ist gelungen, sie trotzdem unter Ubuntu und Mac OSX zu installieren, so dass dort bisher keine Probleme aufgetreten sind.

Wenn Sie sich für ein Update auf die neuere Bibliothek entscheiden, empfehle ich Ihnen, auf die neueste Serverversion zu aktualisieren, da diese auch einige nette Funktionen bietet. Sie müssen libevent installieren, damit es kompiliert werden kann, aber unter Ubuntu gab es keine großen Probleme.

Ich habe bisher noch keine Frameworks gesehen, die den neuen Memcached-Client aufgenommen haben (obwohl ich sie nicht im Auge habe), aber ich gehe davon aus, dass Zend in Kürze an Bord kommt.

AKTUALISIEREN

Zend Framework 2 verfügt über einen Adapter für Memcached, den Sie hier finden


1
Ausgezeichnete Antwort; Außerdem ist die externe Abhängigkeit von libmemcached in diesem Fall ein Plus, da es sich um einen der aktiv entwickelten Clients handelt.
Marc Bollinger

Einverstanden. Die libmemcached externe Abhängigkeit sollte überhaupt nicht als Problem angesehen werden, genau wie libevent.
Miha Hribar

1
Das Cas Tokens-Ding klingt nach dem größten Plus. Wenn man sich diese Funktionen ansieht, sieht es fast so aus, als würde memcached eher zu einem verwalteten Datenhalter wie einer Datenbank und weniger zu einem temporären Cache gehen.
Xeoncross

Wenn Sie danach suchen, haben Sie bereits memcachedb ( memcachedb.org ), das eigentlich nur eine Berkley-Datenbank ist, die das memcached-Protokoll spricht.
Miha Hribar

8
Diese Antwort sagt nicht einmal den Unterschied zwischen Memcache und Memcached ?! Ist Memcache nur die ältere Version von Memcached?
Daniel W.


8

Dies ist 2013. Vergessen Sie die Kommentare von 2009. Wenn Sie ernsthafte Verkehrslasten ausführen, sollten Sie nicht einmal darüber nachdenken, wie Sie mit einem Windows-basierten Memcache umgehen sollen. Bei einem sehr großen Umfang (über 500 Front-End-Webserver) und über 20 Back-End-Datenbankservern und -Replikanten (MySQL- und MSSQL-Mix) unterstützt eine Farm von zwischengespeicherten Servern (12 Server in der Gruppe) mehrere OLTP-Anwendungen mit hohem Volumen, die 25 KB beantworten ~ 40K mc-> Anrufe pro Sekunde erhalten. Diese Aufrufe müssen NICHT in eine Datenbank gelangen.

Meiner Meinung nach führte diese Verwendung von memcached zu ernsthaften Einsparungen bei den Investitionskosten für neue DB-Server und -Lizenzen sowie bei Supportverträgen für große kommerzielle Designs.


48
Wie beantwortet dies die Frage nach Unterschieden zwischen diesen beiden Implementierungen des Memcache-Protokolls in PHP?
Marki555

9
Dies sollte ein Kommentar sein.
Elijah Lynn

7

Memcached ist eine neuere API. Sie bietet Memcached auch als Sitzungsanbieter an. Dies kann hilfreich sein, wenn Sie über eine Serverfarm verfügen.

Nachdem die Version immer noch sehr niedrig ist 0.2, aber ich habe beide verwendet und ich hatte kein großes Problem, so würde ich zu memcached gehen, da es neu ist.


1
Beide arbeiten tatsächlich als Sitzungshandler, obwohl ich sie dafür nie verwenden möchte. us3.php.net/manual/en/memcache.examples-overview.php
Xeoncross

gut, fang mein schlechtes, ja, es ist nur auf großen Servern wirklich nützlich, wenn ich wirklich wichtig werde, und Memcache bestätigt nicht, dass es kein Objekt fallen lässt, um Speicher zu erhalten, der so schwer zu skalieren ist.
RageZ

1
Die Version 0.2 wurde inzwischen von einer stabilen Version 1.0.0 übertroffen.
Miha Hribar
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.