Frage Memcached gegen Redis?


Wir verwenden eine Ruby Web-App mit Redis Server für das Zwischenspeichern. Gibt es einen Punkt zu testen? Memcached stattdessen?

Was wird uns bessere Leistung bringen? Irgendwelche Vor- oder Nachteile zwischen Redis und Memcached?

Punkte, die man beachten sollte:

  • Lese- / Schreibgeschwindigkeit.
  • Speichernutzung.
  • Datenträger-E / A-Dump
  • Skalierung.

1136
2018-05-11 20:52


Ursprung


Antworten:


Zusammenfassung (TL; DR)

Aktualisiert am 3. Juni 2017

Redis ist leistungsfähiger, beliebter und besser unterstützt als memcached. Memcached kann nur einen kleinen Teil der Dinge tun, die Redis tun kann. Redis ist besser, auch wenn ihre Funktionen sich überschneiden.

Wenn Sie etwas Neues brauchen, verwenden Sie Redis.

Memcached vs Redis: Direkter Vergleich

Beide Tools sind leistungsstarke, schnelle In-Memory-Datenspeicher, die als Cache nützlich sind. Beide können dazu beitragen, Ihre Anwendung zu beschleunigen, indem Sie Datenbankergebnisse, HTML-Fragmente oder andere Elemente, die möglicherweise teuer zu generieren sind, zwischenspeichern.

Punkte, die man beachten sollte

Wenn sie für die gleiche Sache verwendet werden, vergleichen sie die folgenden Punkte mit den "Points to Contrast" der ursprünglichen Frage:

  • Lese- / Schreibgeschwindigkeit: Beide sind extrem schnell. Benchmarks variieren je nach Workload, Versionen und vielen anderen Faktoren, zeigen aber im Allgemeinen, dass redis so schnell oder fast so schnell ist wie memcached. Ich empfehle redis, aber nicht, weil Memcached langsam ist. Es ist nicht.
  • Speichernutzung: Redis ist besser.
    • memcached: Sie geben die Cachegröße an, und beim Einfügen von Elementen wächst der Daemon schnell auf etwas mehr als diese Größe an. Es gibt nie wirklich eine Möglichkeit, diesen Speicherplatz zurückzuerhalten, kurz bevor memcached neu gestartet wird. Alle Ihre Schlüssel könnten abgelaufen sein, Sie könnten die Datenbank leeren, und sie würde immer noch den vollen Teil des RAM verwenden, mit dem Sie sie konfiguriert haben.
    • redis: Das Festlegen einer maximalen Größe liegt bei Ihnen. Redis wird nie mehr verwenden, als es benötigt, und wird Ihnen Speicher zurückgeben, den es nicht mehr verwendet.
    • Ich habe 100.000 ~ 2KB Strings (~ 200MB) von zufälligen Sätzen in beiden gespeichert. Memcached RAM-Nutzung wuchs auf ~ 225 MB. Redis RAM-Nutzung wuchs auf ~ 228MB. Nach dem Flushing sank Redis auf ~ 29MB und Memcached blieb bei ~ 225MB. Sie sind ähnlich effizient in der Art, wie sie Daten speichern, aber nur einer ist in der Lage, sie zurückzugewinnen.
  • Datenträger-E / A-Dump: Ein klarer Gewinn für redis, da es dies standardmäßig tut und eine sehr konfigurierbare Persistenz hat. Memcached verfügt über keine Mechanismen zum Dumping auf Festplatte ohne Drittanbieter-Tools.
  • Skalierung: Beide geben Ihnen viel Spielraum, bevor Sie mehr als eine einzelne Instanz als Cache benötigen. Redis enthält Tools, mit denen Sie darüber hinausgehen können, während memcached dies nicht tut.

Memcached

Memcached ist ein einfacher flüchtiger Cache-Server. Sie können Schlüssel / Wert-Paare speichern, deren Wert auf eine Zeichenfolge von bis zu 1 MB beschränkt ist.

Es ist gut darin, aber das ist es auch. Sie können auf diese Werte mit ihrem Schlüssel mit extrem hoher Geschwindigkeit zugreifen, wobei häufig das verfügbare Netzwerk oder sogar die Speicherbandbreite gesättigt wird.

Wenn Sie memcached neu starten, sind Ihre Daten verschwunden. Dies ist in Ordnung für einen Cache. Sie sollten dort nichts Wichtiges aufbewahren.

Wenn Sie eine hohe Leistung oder hohe Verfügbarkeit benötigen, stehen Tools, Produkte und Services von Drittanbietern zur Verfügung.

wieder auf

Redis kann dieselben Aufgaben wie Memcached ausführen und kann diese besser erledigen.

Redis kann agiere als Cache auch. Es kann auch Schlüssel / Wert-Paare speichern. In redis können sie sogar bis zu 512MB betragen.

Sie können die Persistenz deaktivieren, und beim Neustart werden Ihre Daten glücklicherweise verloren gehen. Wenn Sie möchten, dass Ihr Cache Neustarts überlebt, können Sie das auch tun. In der Tat ist das die Standardeinstellung.

Es ist auch super schnell, oft begrenzt durch Netzwerk- oder Speicherbandbreite.

Wenn eine Instanz von redis / memcached nicht genügend Leistung für Ihre Arbeitslast bietet, ist redis die richtige Wahl. Redis enthält Clusterunterstützung und kommt mit Hochverfügbarkeits-Tools (Redisenselin) rechts "in der Box". In den letzten Jahren hat sich redis auch als klarer Marktführer bei 3rd-Party-Werkzeugen etabliert. Unternehmen wie Redis Labs, Amazon und andere bieten viele nützliche Redis-Tools und -Dienste an. Das Ökosystem um Redis ist viel größer. Die Anzahl der großen Bereitstellungen ist jetzt wahrscheinlich größer als für Memcached.

Der Redis Superset

Redis ist mehr als ein Cache. Es ist ein In-Memory-Datenstrukturserver. Im Folgenden finden Sie einen kurzen Überblick über Dinge, die Redis nicht nur als einfacher Schlüssel / Wert-Cache wie memcached ausführen kann. Die meisten die Eigenschaften von redis sind Dinge, die memcached nicht tun kann.

Dokumentation

Redis ist besser dokumentiert als memcached. Obwohl dies subjektiv sein kann, scheint es immer wahrer zu sein.

redis.io ist eine fantastische leicht navigierbare Ressource. Es lässt dich versuche es erneut im Browser und gibt Ihnen sogar interaktive Live-Beispiele mit jedem Befehl in den Dokumenten.

Es gibt jetzt 2x so viele Stackoverflow-Ergebnisse für redis wie memcached. 2x so viele Google-Ergebnisse. Leichter zugängliche Beispiele in mehreren Sprachen. Aktivere Entwicklung. Aktivere Kundenentwicklung. Diese Messungen mögen nicht viel individuell sein, aber in Kombination ergeben sie ein klares Bild, dass Unterstützung und Dokumentation für Redis größer und viel aktueller sind.

Beharrlichkeit

Standardmäßig werden die Daten mithilfe eines Mechanismus namens Snapshotting auf der Festplatte gespeichert. Wenn Sie über genügend RAM verfügen, können Sie alle Ihre Daten nahezu ohne Leistungseinbußen auf die Festplatte schreiben. Es ist fast kostenlos!

Im Snapshot-Modus besteht die Möglichkeit, dass ein plötzlicher Absturz zu einer kleinen Menge verlorener Daten führen kann. Wenn Sie absolut sicher gehen müssen, dass keine Daten verloren gehen, keine Sorge, redis hat auch Ihren Rücken dort mit AOF (Append nur Datei) -Modus. In diesem Persistenzmodus können Daten während des Schreibens mit der Festplatte synchronisiert werden. Dies kann den maximalen Schreibdurchsatz so schnell wie möglich reduzieren, sollte aber immer noch recht schnell sein.

Es gibt viele Konfigurationsoptionen, um die Persistenz bei Bedarf anzupassen, aber die Standardeinstellungen sind sehr sinnvoll. Diese Optionen machen es einfach, redis als einen sicheren, redundanten Ort zum Speichern von Daten einzurichten. Es ist ein echt Datenbank.

Viele Datentypen

Memcached ist auf Strings beschränkt, aber Redis ist ein Datenstrukturserver, der viele verschiedene Datentypen bereitstellen kann. Es enthält auch die Befehle, die Sie benötigen, um diese Datentypen optimal zu nutzen.

Saiten (Befehle)

Einfache Text- oder Binärwerte, die bis zu 512 MB groß sein können. Dies ist der einzige Datentyp redis und memcached share, obwohl memcached Strings auf 1 MB beschränkt sind.

Redis bietet Ihnen mehr Werkzeuge, um diesen Datentyp zu nutzen, indem Sie Befehle für bitweise Operationen, Bit-Level-Manipulation, Gleitkomma-Inkrement- / Dekrement-Unterstützung, Bereichsabfragen und Multitastenoperationen anbieten. Memcached unterstützt das nicht.

Strings sind für alle Arten von Anwendungsfällen nützlich, weshalb memcached allein mit diesem Datentyp sehr nützlich ist.

Hashes (Befehle)

Hashes sind wie ein Schlüsselwertspeicher innerhalb eines Schlüsselwertspeichers. Sie ordnen zwischen Zeichenfolgenfeldern und Zeichenfolgenwerten zu. Feld-> Wert-Maps mit einem Hash sind etwas platzsparender als Schlüssel-> Wert-Maps mit regulären Strings.

Hashes sind nützlich als Namespace oder wenn Sie viele Schlüssel logisch gruppieren möchten. Mit einem Hash können Sie alle Mitglieder effizient erfassen, alle Mitglieder zusammen löschen, alle Mitglieder zusammen löschen, usw. Großartig für jeden Anwendungsfall, bei dem Sie mehrere Schlüssel / Wert-Paare gruppieren müssen.

Ein Beispiel für die Verwendung eines Hash ist das Speichern von Benutzerprofilen zwischen Anwendungen. Ein Redis-Hash, der zusammen mit der Benutzer-ID als Schlüssel gespeichert wird, ermöglicht es Ihnen, so viele Datenbits über einen Benutzer wie nötig zu speichern, während Sie sie unter einem einzigen Schlüssel speichern. Der Vorteil der Verwendung eines Hashs anstelle des Serialisierens des Profils in eine Zeichenfolge besteht darin, dass verschiedene Anwendungen unterschiedliche Felder innerhalb des Benutzerprofils lesen / schreiben können, ohne sich über eine Anwendung Gedanken machen zu müssen, die von anderen vorgenommen wurde Daten).

Listen (Befehle)

Redis-Listen sind sortierte Sammlungen von Strings. Sie sind für das Einfügen, Lesen oder Entfernen von Werten von oben oder unten (aka: links oder rechts) der Liste optimiert.

Redis bietet viele Befehle für die Nutzung von Listen, einschließlich Befehle zum Schieben / Platzieren von Elementen, Push / Pop zwischen Listen, Abschneiden von Listen, Ausführen von Bereichsabfragen usw.

Listen bilden lange haltbare, atomare Warteschlangen. Diese eignen sich hervorragend für Jobwarteschlangen, Protokolle, Puffer und viele andere Anwendungsfälle.

Sätze (Befehle)

Sets sind ungeordnete Sammlungen von eindeutigen Werten. Sie sind so optimiert, dass Sie schnell überprüfen können, ob ein Wert in der Menge enthalten ist, schnell Werte hinzufügen / entfernen und Überschneidungen mit anderen Mengen messen können.

Diese sind ideal für Dinge wie Zugriffskontrolllisten, einzigartige Besucher-Tracker und viele andere Dinge. Die meisten Programmiersprachen haben etwas ähnliches (normalerweise ein Set genannt). Das ist so, nur verteilt.

Redis bietet mehrere Befehle Sätze verwalten. Offensichtliche wie Hinzufügen, Entfernen und Überprüfen des Satzes sind vorhanden. Es sind also weniger offensichtliche Befehle wie das Aufrufen / Lesen eines zufälligen Elements und Befehle zum Ausführen von Vereinigungen und Überschneidungen mit anderen Mengen.

Sortierte Sätze (Befehle)

Sortierte Sets sind auch Sammlungen von eindeutigen Werten. Diese sind, wie der Name schon sagt, geordnet. Sie sind nach einem Punktestand geordnet, dann lexikografisch.

Dieser Datentyp ist für schnelle Suchvorgänge nach Score optimiert. Der höchste, niedrigste oder ein beliebiger Wertebereich dazwischen ist extrem schnell.

Wenn Sie Benutzer zu einem sortierten Set zusammen mit ihrem Highscore hinzufügen, haben Sie selbst eine perfekte Rangliste. Wenn neue Highscores hinzukommen, füge sie einfach mit ihrem Highscore wieder zum Set hinzu und es wird deine Rangliste neu ordnen. Auch gut, um zu verfolgen, wann Nutzer das letzte Mal besucht haben und wer in Ihrer Anwendung aktiv ist.

Wenn Werte mit demselben Wert gespeichert werden, werden sie lexikografisch geordnet (denken Sie alphabetisch). Dies kann nützlich sein für Dinge wie automatische Vervollständigung.

Viele der sortierten Sets Befehle sind Befehlen für Sets ähnlich, manchmal mit einem zusätzlichen Score-Parameter. Ebenfalls enthalten sind Befehle zum Verwalten von Partituren und Abfragen nach Partitur.

Geo

Redis hat mehrere Befehle zum Speichern, Abrufen und Messen geographischer Daten. Dazu gehören Radiusabfragen und das Messen von Entfernungen zwischen Punkten.

Technisch geographische Daten in redis werden in sortierten Mengen gespeichert, also ist dies kein wirklich separater Datentyp. Es ist eher eine Erweiterung über sortierte Sätze.

Bitmap und HyperLogLog

Wie Geo sind diese nicht vollständig separate Datentypen. Mit diesen Befehlen können Sie Zeichenkettendaten so behandeln, als ob es sich um eine Bitmap oder ein Hyperprotokoll handelt.

Bitmaps sind die Bit-Level-Operatoren, auf die ich unter verwiesen habe Strings sind für. Dieser Datentyp war der Grundbaustein für reddits neuestes kollaboratives Kunstprojekt: r / Ort.

HyperLogLog ermöglicht es Ihnen, einen konstanten, extrem kleinen Speicherplatz zu verwenden, um nahezu unbegrenzte eindeutige Werte mit schockierender Genauigkeit zu zählen. Mit nur ~ 16KB können Sie effizient die Anzahl der einzelnen Besucher auf Ihrer Website zählen, selbst wenn diese Zahl in Millionen ist.

Transaktionen und Atomkraft

Befehle in redis sind atomar, was bedeutet, dass Sie sicher sein können, dass sobald Sie einen Wert für redis schreiben, dieser Wert für alle Clients sichtbar ist, die mit redis verbunden sind. Es gibt keine Wartezeit, bis sich dieser Wert ausbreitet. Technisch memcached ist auch atomar, aber mit redisce all diese Funktionalität über Memcached hinaus hinzuzufügen, ist es erwähnenswert und etwas beeindruckend, dass all diese zusätzlichen Datentypen und Features auch atomar sind.

Obwohl es nicht ganz dasselbe ist wie Transaktionen in relationalen Datenbanken, hat auch redis Transaktionen das verwenden "optimistisches Sperren" (UHR/MULTI/EXEC).

Pipelining

Redis bietet eine Funktion namens 'Pipelining". Wenn Sie viele redis-Befehle ausführen möchten, können Sie die Pipelining-Funktion verwenden, um sie alle gleichzeitig an Redis zu senden, anstatt sie einzeln nacheinander zu verwenden.

Wenn Sie einen Befehl für redis oder memcached ausführen, ist normalerweise jeder Befehl ein separater Anfrage / Antwort-Zyklus. Mit Pipelining kann redis mehrere Befehle puffern und alle auf einmal ausführen, wobei alle Antworten auf alle Befehle in einer einzigen Antwort beantwortet werden.

Dadurch können Sie beim Bulk-Import oder anderen Aktionen mit vielen Befehlen einen noch höheren Durchsatz erzielen.

Pub / Sub

Redis hat Befehle gewidmet zu Pub / Sub-Funktionalitätermöglicht Redis, als ein Hochgeschwindigkeits-Nachrichtensender zu fungieren. Dadurch kann ein einzelner Client Nachrichten an viele andere Clients veröffentlichen, die mit einem Kanal verbunden sind.

Redis macht sowohl Pub / Sub als auch fast jedes Tool. Dedizierte Nachrichtenbroker mögen KaninchenMQ mag in bestimmten Bereichen Vorteile bieten, aber die Tatsache, dass derselbe Server Ihnen auch dauerhafte dauerhafte Warteschlangen und andere Datenstrukturen geben kann, die Ihre Pub / Sub-Workloads wahrscheinlich benötigen, erweist sich oft als das beste und einfachste Tool für den Job.

Lua Skripting

Sie können irgendwie denken Lua-Skripte wie Redis eigene SQL oder gespeicherte Prozeduren. Es ist mehr und weniger als das, aber die Analogie funktioniert meistens.

Vielleicht haben Sie komplexe Berechnungen, die redis durchführen soll. Vielleicht können Sie es sich nicht leisten, dass Ihre Transaktionen zurückrollen und Garantien benötigen, dass jeder Schritt eines komplexen Prozesses atomar abläuft. Diese Probleme und viele mehr können mit Lua Scripting gelöst werden.

Das gesamte Skript wird atomar ausgeführt. Wenn Sie also Ihre Logik in ein Lua-Skript einfügen können, können Sie oft vermeiden, dass Sie mit optimistischen Sperrtransaktionen herumhantieren.

Skalierung

Wie bereits erwähnt, enthält redis integrierte Unterstützung für das Clustering und ist mit einem eigenen Hochverfügbarkeitswerkzeug namens redis-sentinel.

Fazit

Ohne zu zögern würde ich empfehlen, redis über memcached für neue Projekte oder bestehende Projekte, die nicht bereits Memcached verwenden.

Das obige klingt vielleicht so, als würde ich Memcached nicht mögen. Im Gegenteil: Es ist ein leistungsfähiges, einfaches, stabiles, ausgereiftes und gehärtetes Werkzeug. Es gibt sogar einige Anwendungsfälle, in denen es etwas schneller ist als das Redis. Ich liebe Memcached. Ich denke nur nicht, dass es für die zukünftige Entwicklung viel Sinn ergibt.

Redis macht alles, was memcached tut, oft besser. Jeder Leistungsvorteil für Memcaching ist geringfügig und arbeitslastspezifisch. Es gibt auch Workloads, für die redis schneller ist, und viele weitere Workloads, die redis ausführen können, was memcached einfach nicht kann. Die winzigen Leistungsunterschiede scheinen angesichts der riesigen Funktionalität und der Tatsache, dass beide Tools so schnell und effizient sind, dass sie das letzte Teil Ihrer Infrastruktur sein können, um die Sie sich je kümmern müssen, gering zu sein.

Es gibt nur ein Szenario, in dem Memcaching sinnvoller ist: wo Memcaching bereits als Cache verwendet wird. Wenn Sie bereits mit memcached cachen, verwenden Sie es weiterhin, wenn es Ihren Anforderungen entspricht. Es ist wahrscheinlich nicht die Mühe wert, um zu redis zu bewegen und wenn Sie redis nur zum Caching verwenden werden, bietet es möglicherweise nicht genug Nutzen, um Ihre Zeit wert zu sein. Wenn memcached nicht Ihren Anforderungen entspricht, sollten Sie wahrscheinlich zu redis wechseln. Dies gilt unabhängig davon, ob Sie über Memcache hinaus skalieren müssen oder zusätzliche Funktionen benötigen.


1638
2018-06-29 06:54



Verwenden Sie Redis if

  1. Sie müssen Elemente selektiv im Cache löschen / löschen. (Du brauchst das)

  2. Sie benötigen die Möglichkeit, Schlüssel eines bestimmten Typs abzufragen. Gl. 'blog1: Beiträge: *', 'blog2: Kategorien: xyz: Beiträge: *'. Oh ja! Dies ist sehr wichtig. Verwenden Sie dies, um bestimmte Typen von zwischengespeicherten Elementen selektiv ungültig zu machen. Sie können damit auch den Fragment-Cache, den Seiten-Cache, nur AR-Objekte eines bestimmten Typs usw. ungültig machen.

  3. Persistenz (Sie benötigen dies auch, es sei denn, Sie sind in Ordnung, dass sich Ihr Cache nach jedem Neustart aufwärmen muss. Sehr wichtig für Objekte, die sich selten ändern)

Verwenden Sie memcached wenn

  1. Memcached gibt dir Kopfschmerzen!
  2. Umm ... Clustering? meh. Wenn Sie so weit gehen, verwenden Sie Varnish und Redis zum Cachen von Fragmenten und AR-Objekten.

Aus meiner Erfahrung habe ich eine viel bessere Stabilität mit Redis als Memcached


128
2017-07-05 06:04



Memcached ist Multithread und schnell.

Redis hat viele Funktionen und ist sehr schnell, aber vollständig auf einen Kern beschränkt, da es auf einer Ereignisschleife basiert.

Wir benutzen beides. Memcached wird zum Zwischenspeichern von Objekten verwendet und reduziert in erster Linie die Lese-Belastung der Datenbanken. Redis wird für Dinge wie sortierte Sätze verwendet, die zum Aufrollen von Zeitreihendaten nützlich sind.


76
2018-05-03 16:41



Dies ist zu lang, um als Kommentar zu einer bereits angenommenen Antwort gepostet zu werden, daher gebe ich es als separate Antwort an

Eine Sache, die Sie ebenfalls beachten sollten, ist, ob Sie eine harte obere Speichergrenze für Ihre Cache-Instanz erwarten.

Da redis eine nosql-Datenbank mit vielen Funktionen ist und das Caching nur eine Option ist, kann es Speicher nach Bedarf zuweisen - je mehr Objekte Sie darin einfügen, desto mehr Speicher wird verwendet. Das maxmemory Option erzwingt die Verwendung der oberen Speichergrenze nicht streng. Wenn Sie mit dem Cache arbeiten, werden Schlüssel gelöscht und sind abgelaufen. Ihre Schlüssel sind wahrscheinlich nicht alle gleich groß, so dass es zu einer internen Speicherfragmentierung kommt.

Standardmäßig verwendet redis erneut jemalloc Speicherzuordner, der sein Bestes versucht, um sowohl speicherkompakt als auch schnell zu sein, aber es ist ein Allzweckspeicherzuordner und er kann nicht mit vielen Zuteilungen und Objektspülungen, die mit einer hohen Rate auftreten, mithalten. Aus diesem Grund kann bei einigen Lastmustern der Redis-Prozess aufgrund interner Fragmentierung Speicher verlieren. Wenn Sie z. B. einen Server mit 7 GB RAM haben und redis als nicht persistenten LRU-Cache verwenden möchten, können Sie den Redis-Prozess mit maxmemory Wenn Sie im Laufe der Zeit 5 Gb verwenden, wird mehr und mehr Arbeitsspeicher benötigt, und schließlich wird das gesamte RAM-Limit erreicht, bis sich der Speichermörder überlagert.

memcached passt besser zum oben beschriebenen Szenario, da es seinen Speicher auf eine völlig andere Weise verwaltet. memcached teilt einen großen Teil des Speichers zu - alles, was es jemals brauchen wird - und verwaltet dann diesen Speicher selbst, indem er seinen eigenen implementiert Plattenverteiler. Außerdem versucht memcached, die interne Fragmentierung so gering wie möglich zu halten verwendet pro-Platten-LRU-Algorithmus, wenn LRU-Räumungen mit berücksichtigter Objektgröße durchgeführt werden.

Mit dieser Aussage hat memcached immer noch eine starke Position in Umgebungen, in denen die Speichernutzung durchgesetzt werden muss und / oder vorhersagbar sein muss. Wir haben versucht, die neueste stable redis (2.8.19) als Drop-in-nicht-persistenten LRU-basierten memcached Ersatz bei einer Arbeitslast von 10-15k op / s zu verwenden, und es durchliefen Speicher A LOT; Die gleiche Arbeitslast stürzte die ElastiCache-Redis-Instanzen von Amazon an einem Tag oder so aus denselben Gründen ab.


68
2018-03-02 11:13



Memcached ist gut als einfacher Schlüssel / Wert-Speicher und ist gut in der Ausführung von key => STRING. Dies macht es wirklich gut für Sitzungsspeicher.

Redis ist gut in der Schlüssel => SOME_OBJECT.

Es hängt wirklich davon ab, was du da reingibst. Mein Verständnis ist, dass sie in Bezug auf die Leistung ziemlich gleichmäßig sind.

Auch viel Glück bei der Suche nach irgendwelchen objektiven Benchmarks, wenn Sie einige freundlicherweise auf meine Weise schicken.


44
2018-05-11 23:27



Wenn Ihnen ein krasser Schreibstil nichts ausmacht, Redis gegen Memcached Auf dem Systoilet-Blog lohnt sich ein Lesen unter dem Gesichtspunkt der Benutzerfreundlichkeit, aber lesen Sie das Hin und Her in den Kommentaren, bevor Sie irgendwelche Schlüsse auf die Leistung ziehen; Es gibt einige methodische Probleme (Singlethread-Busy-Loop-Tests), und Redis hat einige Verbesserungen vorgenommen, seit der Artikel ebenfalls geschrieben wurde.

Und kein Benchmark-Link ist komplett, ohne die Dinge ein wenig zu verwirren, also schaut euch auch einige widersprüchliche Benchmarks an Dormondos LiveJournal und das Antirez Weblog.

Bearbeiten - Wie Antirez betont, ist die Systoilet-Analyse eher schlecht durchdacht. Selbst außerhalb des Single-Threading-Mangels kann ein Großteil der Leistungsunterschiede in diesen Benchmarks eher den Client-Bibliotheken als dem Server-Durchsatz zugeschrieben werden. Die Benchmarks bei das Antirez Weblog in der Tat einen viel mehr Äpfel-zu-Äpfel (mit dem gleichen Mund) Vergleich.


36
2018-06-15 22:38



Ich habe die Möglichkeit, Memcached und Redis zusammen in dem Caching-Proxy zu verwenden, an dem ich gearbeitet habe, lass mich dir mitteilen, wo genau ich was verwendet habe und warum ich das gleiche getan habe ....

Redis>

1) Wird zum Indexieren des Cache-Inhalts über den Cluster verwendet. Ich habe mehr als Milliarden von Schlüsseln verteilt über Redis-Cluster, Redis-Antwortzeiten sind weniger und stabil.

2) Grundsätzlich ist es ein Schlüssel / Wert-Speicher, also wo immer in Ihrer Anwendung Sie etwas ähnliches haben, kann man redis mit viel Mühe verwenden.

3) Redis Persistenz, Failover und Backup (AOF) erleichtern Ihre Arbeit.

Memcache>

1) Ja, ein optimierter Speicher, der als Cache verwendet werden kann. Ich benutzte es zum Speichern von Cache-Inhalten, auf die sehr häufig zugegriffen wurde (mit 50 Treffern / Sekunde), mit einer Größe von weniger als 1 MB.

2) Ich habe nur 2 GB von 16 GB für memcached zugewiesen, auch wenn meine einzelne Inhaltsgröße> 1 MB war.

3) Da der Inhalt in der Nähe der Grenzwerte wächst, habe ich gelegentlich höhere Antwortzeiten in den Statistiken beobachtet (nicht der Fall bei redis).

Wenn Sie nach Gesamterfahrung fragen Redis ist sehr grün, da es einfach zu konfigurieren ist, viel Flexibilität mit stabilen, robusten Funktionen.

Darüber hinaus steht ein Benchmarking-Ergebnis zur Verfügung Verknüpfung , unten sind einige higlight von demselben,

enter image description here

enter image description here

Hoffe das hilft!!


18
2017-10-16 10:20



Ein weiterer Vorteil ist, dass sehr klar ist, wie Memcache sich in einem Caching-Szenario verhalten wird, während redis im Allgemeinen als persistenter Datenspeicher verwendet wird, obwohl es so konfiguriert werden kann, dass es sich genauso verhält wie memcached aka Kapazität.

Einige Apps, an denen ich gearbeitet habe, verwenden beide nur, um klar zu machen, wie sich die Daten verhalten sollen - Dinge in Memcache, wir schreiben Code, um die Fälle zu behandeln, in denen sie nicht vorhanden sind - wir sind darauf angewiesen, dass sie da sind .

Abgesehen davon wird Redis im Allgemeinen als überlegen angesehen, da die meisten Anwendungsfälle funktionsreicher und damit flexibler sind.


11
2017-07-04 12:42



Prüfung. Führen Sie einige einfache Benchmarks aus. Ich betrachtete mich lange Zeit als Nashorn der alten Schule, da ich hauptsächlich Memcached benutzte und Redis als neues Kind betrachtete.

Bei meiner jetzigen Firma wurde Redis als Hauptcache verwendet. Als ich mich in Leistungsstatistiken vertiefte und einfach mit dem Testen begann, war Redis in Bezug auf die Leistung vergleichbar oder minimal Langsamer als MySQL.

Memcached, obwohl simpel, blies Redis aus Wasser total. Es skaliert viel besser:

  • für größere Werte (erforderliche Änderung der Brammengröße, aber funktioniert)
  • für mehrere gleichzeitige Anfragen

Memcached Eviction Policy ist meiner Ansicht nach viel besser implementiert, was insgesamt zu einer stabileren durchschnittlichen Antwortzeit führt, während mehr Daten verarbeitet werden, als der Cache verarbeiten kann.

Ein Benchmarking ergab, dass Redis in unserem Fall sehr schlecht abschneidet. Dies hat meiner Meinung nach mit vielen Variablen zu tun:

  • Art der Hardware, auf der Redis läuft
  • Arten von Daten, die Sie speichern
  • Menge an Gets und Sets
  • Wie gleich ist deine App?
  • Benötigen Sie einen Datenstrukturspeicher?

Persönlich teile ich nicht die Ansicht, die Redis-Autoren auf Gleichzeitigkeit und Multithreading haben.


11
2017-11-13 08:14



Es wäre nicht falsch, wenn wir sagen, dass redis eine Kombination von (Cache + Datenstruktur) ist, während memcached nur ein Cache ist.


9
2018-06-16 05:45



Ein Hauptunterschied, auf den hier nicht hingewiesen wurde, ist, dass Memcache immer ein oberes Speicherlimit hat, während Redis nicht standardmäßig (kann aber konfiguriert werden). Wenn Sie immer einen Schlüssel / Wert für eine bestimmte Zeit speichern möchten (und ihn nie aus Platzgründen löschen), möchten Sie Redis verwenden. Natürlich riskiert man auch das Problem, dass der Speicher knapp wird ...


7
2018-03-01 09:45