Ist memcached ein Dinosaurier im Vergleich zu Redis? [geschlossen]

185

Ich habe in den letzten Wochen ziemlich viel mit memcached gearbeitet und gerade von Redis erfahren. Als ich diesen Teil ihrer Readme las, bekam ich plötzlich ein warmes, gemütliches Gefühl im Magen:

Redis kann als Memcached für Steroide verwendet werden, da es so schnell wie Memcached ist, aber eine Reihe weiterer Funktionen bietet. Wie memcached unterstützt Redis auch das Festlegen von Zeitlimits für Schlüssel, sodass dieser Schlüssel automatisch entfernt wird, wenn eine bestimmte Zeit vergeht.

Das klingt erstaunlich. Ich hatte diese Seite auch mit Benchmarks gefunden: http://www.ruturaj.net/redis-memcached-tokyo-tyrant-mysql-comparison

Also, ehrlich - Ist Memcache wirklich der alte Dinousaur, der aus Performance-Sicht im Vergleich zu diesem Newcomer namens Redis eine schlechte Wahl ist?

Ich habe vorher noch nicht viel über Redis gehört, daher der Ansatz für meine Frage!

Industriell
quelle
Interessante zusätzliche Lektüre: nosql.mypopescu.com/post/519078332/memcached-on-top-of-redis
Industrial
9
Dieser Ruturaj-Benchmark ist nicht wirklich viel Aufmerksamkeit wert
Dsomnus
2
Wir haben angefangen, mit Membase bei der Arbeit zu experimentieren und sind bisher glücklich. Obwohl wir aus Memcache kommen, war es ein schönes Plus, einen Ersatz zu haben: membase.org
jayshao
2
Redis ist so schnell wie Memcached für nicht realistisch erfundene Benchmarks. Das soll nicht heißen, dass es langsam ist - es ist sicherlich schnell genug für die meisten Workloads, aber Dinge, die schneller als memcached sind, enthüllen nur Fehler in memcached. Es ist fast immer ein Engpass durch Hardware oder schlechtes Anwendungsdesign.
Dustin
4
Ich bin überrascht, dass die Heiligkeit der SO-Patrouille diese Frage nicht als nicht angemessen und nicht hilfreich abgeschlossen hat.
Dogweather

Antworten:

74

Memcache ist immer noch ein ausgezeichnetes Werkzeug und SEHR zuverlässig.

Anstatt dieses Problem aus der Perspektive zu betrachten, wer im Bereich von <100 ms schneller ist, sollten Sie sich die Leistung pro "Klasse" der Software ansehen.

  • Verwendet es nur lokalen RAM? -> am schnellsten
  • Verwendet es Remote-RAM? -> schnell
  • Verwendet es RAM plus Festplatte -> oh hurm.
  • Verwendet es nur Festplatte -> ausführen!
Daniel
quelle
3
Es gibt keine Möglichkeit, die Replikation mit mir bekanntem Memcache durchzuführen. Memcache ist lediglich als Cache gedacht. Wenn der Gegenstand gelöscht wird / verloren geht, muss er neu erstellt werden. Ich habe dies noch nie benutzt und auch nicht bewertet, aber dies könnte für Sie von Interesse sein. code.google.com/p/memagent
Daniel
1
Membase unterstützt das Memcached-Protokoll, aber auch Persistenz und Replikation.
Jim Ferrans
1
Kürzlich habe ich gebundenes Ethernet über 4 Ports gesehen. 4 x 44 MB / s. Dies macht RAM noch wertvoller, vorausgesetzt, Sie können gebundenes Ethernet in Gang bringen!
Daniel
1
Zum späteren Nachschlagen hat Facebook kürzlich Open Source mcrouter verwendet, wodurch die Replikation zu memcached hinzugefügt wird. Andere Dinge sind ebenfalls veraltet (Redis ist jetzt super schnell usw.), aber zu Ihrer
Information
Nun, worum geht es? beide kippe ein einfaches json Array direclty speichern, die am weitesten Datenaustauschformat auf dem Netz verwendet wird , habe ich keine Ahnung , was sie dachten ... oh warten Vielleicht sollte ich ReJSON hinzufügen , da nativ niemand kümmert sich um JSON in der Welt gerade
PirateApp
205

Kommt darauf an, was du brauchst, im Allgemeinen denke ich, dass:

  • Sie sollten sich nicht zu sehr für Aufführungen interessieren. Redis ist pro Kern mit kleinen Werten schneller, aber memcached kann mehrere Kerne mit einer einzigen ausführbaren Datei und einem TCP-Port ohne Hilfe des Clients verwenden. Auch memcached ist schneller mit großen Werten in der Größenordnung von 100.000. Redis hat in letzter Zeit viel an großen Werten (instabiler Zweig) verbessert, aber zwischengespeichert ist in diesem Anwendungsfall immer noch schneller. Der Punkt hier ist: Weder der eine noch der andere wird wahrscheinlich Ihr Engpass für die Abfrage pro Sekunde sein, die sie liefern können.
  • Sie sollten sich um die Speichernutzung kümmern. Bei einfachen Schlüssel-Wert-Paaren ist memcached speichereffizienter. Wenn Sie Redis-Hashes verwenden, ist Redis speichereffizienter. Kommt auf den Anwendungsfall an.
  • Sie sollten sich um Persistenz und Replikation kümmern, zwei Funktionen, die nur in Redis verfügbar sind. Selbst wenn Sie einen Cache erstellen möchten, ist es hilfreich, dass Ihre Daten nach einem Upgrade oder Neustart noch vorhanden sind.
  • Sie sollten sich um die Art der Operationen kümmern, die Sie benötigen. In Redis gibt es viele komplexe Vorgänge, selbst wenn man nur den Anwendungsfall des Caching berücksichtigt, kann man oft viel mehr in einem einzigen Vorgang ausführen, ohne dass Daten clientseitig verarbeitet werden müssen (manchmal sind viele E / A erforderlich). Diese Operationen sind oft so schnell wie GET und SET. Wenn Sie also nicht nur GET / SET, sondern auch komplexere Dinge benötigen, kann Redis viel helfen (denken Sie an das Timach-Caching).

Ohne einen Anwendungsfall ist es im Moment schwierig, den richtigen auszuwählen, aber ich denke, dass Redis für viele Dinge Sinn macht, da Sie, selbst wenn Sie ihn nicht als Datenbank verwenden möchten, viel leistungsfähiger sind, wenn Sie viel leistungsfähiger sind. nicht nur Caching, sondern auch Messaging, Ranking und so weiter.

Ps natürlich könnte ich voreingenommen sein, da ich der Hauptentwickler des Redis-Projekts bin.

Antirez
quelle
67
+1 für großartige Offenlegung am Ende
NateDSaint
6
Ich bin mir nicht sicher, ob dies ein Sprachfehler ist, aber wenn Sie Ihre Argumentation mit "Ich denke im Allgemeinen, dass Sie sich nicht zu sehr um die Leistung kümmern sollten" führen, ist dies ein ernsthafter Grund zur Sorge. Redis mag für bestimmte Problemklassen sehr gut sein, aber traditionell wurde Memcache speziell verwendet, um Leistungsprobleme mit persistenten Datenbanken zu lösen. Ich denke auch, dass eine offensichtliche Auslassung von Ihrer Liste die Produktreife ist. Memcache ist ein ausgereiftes Produkt mit rund einem Jahrzehnt Erfahrung. Redis ist vielversprechend, gibt es aber erst seit ungefähr 3 Jahren.
DougW
1
@DougW Sie nehmen diesen Satz aus dem Kontext. Es ist viel sinnvoller, wenn Sie den Satz lesen, der den Absatz direkt danach schließt: "Der Punkt hier ist: Weder der eine noch der andere wird wahrscheinlich Ihr Engpass für die Abfrage pro Sekunde sein, die sie liefern können"
Dinei,
83

Also, ehrlich - Ist Memcache wirklich der alte Dinousaur, der aus Performance-Sicht im Vergleich zu diesem Newcomer namens Redis eine schlechte Wahl ist?

  • Das Vergleichen der eingestellten RedisFunktionen bietet dann weitaus mehr Funktionen.
  • Der Vergleich der einfachen Installation Redisist auch viel einfacher. Keine Abhängigkeiten erforderlich;
  • Ein Vergleich der aktiven Entwicklung Redisist ebenfalls besser.
  • Ich glaube memcachedist ein bisschen schneller als Redis. Es berührt die Disc überhaupt nicht.
  • Meiner Meinung nach ist das Redisein besseres Produkt als memcached.
Alfred
quelle
31
redis berührt die Festplatte nur, wenn Sie dazu aufgefordert werden. Normalerweise macht es jede zweite Sekunde oder so einen Fsync -> Sie werden es nicht bemerken
Marc Seeger
1
@ Marc yup. Ich glaube auch, dass Sie ihm sagen können, dass er die Disc überhaupt nicht berühren soll, aber Standard, glaube ich, dass es im Moment immer fsyncs ist?
Alfred
3
Außerdem ist Redis meiner Erfahrung nach etwas schneller als Memcached (wenn Redis nur im Speichermodus verwendet wird). Antirez machte einen Test hier antirez.com/post/redis-memcached-benchmark.html
Sune Rievers
10
GROSSER UNTERSCHIED: Memcached ist multithreaded und Redis nicht. Während die Latenz einer einzelnen Anforderung vergleichbar ist, kann Memcached bei hoher Parallelität viel mehr Anforderungen bedienen. Redis hingegen erreicht seine Leistungsspitze mit nur wenigen gleichzeitigen Anforderungen, da nur 1 CPU-Kern / Thread verwendet wird. Die vorgeschlagene Methode, um dies zu umgehen, besteht darin, mehrere Redis-Instanzen auf einem Computer mit konsistentem Hashing auszuführen. Dies ist jedoch eine wirklich schlechte Lösung. Wenn Sie also eine hohe Parallelität benötigen und über eine Multi-Core-CPU verfügen (wer nicht), ist Memcached VIEL schneller.
ColinM
2
@ Alfred, es ist keine versteckte Tatsache, dass Redis Single-Threaded ist, es ist eine Designentscheidung (Einfachheit über Robustheit) des Autors. Der oben verlinkte Artikel Dustin ist ein solider Beweis dafür, dass er einen echten Einfluss hat. Außerdem habe ich dies in meinen eigenen Benchmarks mit Redis als Zend_Cache-Backend bestätigt. Mit zunehmender Parallelität wird Redis im Vergleich zu Memcached ziemlich schnell ein Plateau erreichen.
ColinM
46

Was memcached macht, was Redis nicht macht, ist die am wenigsten verwendete Räumung von Werten aus dem Cache. Mit memcached können Sie sicher so viele Werte festlegen, wie Sie möchten. Wenn der Speicher überläuft, werden diejenigen gelöscht, die Sie kürzlich nicht verwendet haben. Mit Redis können Sie dies nur annähern, indem Sie für alles eine Zeitüberschreitung festlegen. Wenn Speicher freigegeben werden muss, werden drei zufällige Schlüssel angezeigt und derjenige gelöscht, der dem Ablauf am nächsten kommt.

Das ist der Hauptunterschied, wenn Sie es nur als Cache verwenden.

Peter Scott
quelle
13

Vielleicht möchten Sie sich auch Membase ansehen.

http://www.northscale.com/products/membase_server.html

Ich habe es nicht verwendet, aber es scheint Redis insofern ähnlich zu sein, als es ein speicherzentrierter KV-Speicher mit Persistenz ist. Die Hauptunterschiede zu dem, was ich sehen kann, sind:

  • Redis verfügt über wesentlich mehr Datenmanipulationsfunktionen (geordnete Sets usw.)
  • Redis verfügt über ein anstehendes Redis Cluster-Projekt, um die horizontale Skalierbarkeit zu verbessern
  • Redis verfügt über eine einzelne Ebene der Datenverlagerung auf die Festplatte (VM), die auf einem Hybridalgorithmus basiert, der sowohl die LRU als auch die Größe des Objekts berücksichtigt.

  • Membase verwendet das Memcached Wire-Protokoll - nützlich als Upgrade-Pfad für vorhandene Anwendungen

  • Membase ist so eingerichtet, dass es mithilfe eines verteilten Hashtabellenansatzes horizontal skaliert
  • Membase kann mithilfe eines LRU-Ansatzes mehrere Ebenen des Daten-Offloads unterstützen (sehr selten wird auf die Festplatte übertragen, etwas selten auf SSD, häufige Daten bleiben im RAM).
  • Ich bin mir nicht sicher über die TTL-Fähigkeit in Membase.

Die Auswahl hängt möglicherweise davon ab, inwieweit Ihre Anwendung die zusätzlichen Datenmanipulationsfunktionen in Redis nutzen kann.

HikeOnPast
quelle
Hallo Dean, danke für deinen Beitrag. Ich werde es auf jeden Fall überprüfen. Kann ich Membase in PHP verwenden?
Industrie
4
Da Membase das Memcached-Protokoll verwendet, sollte jeder der Memcached-Clients funktionieren: wiki.membase.org/bin/view/Main/Clients
HikeOnPast
Membase unterstützt TTL. Alle Memcache-Implementierungen, die unterstützt werden, haben eine Ablaufzeit. github.com/memcached/memcached/blob/master/doc/protocol.txt#L79
Saurav