Warum Redis Memcached wegen Caching schlägt

Memcached oder Redis? Diese Frage taucht fast immer in Diskussionen darüber auf, wie man aus einer modernen, datenbankgesteuerten Webanwendung mehr Leistung herausholen kann. Wenn die Leistung verbessert werden muss, ist das Zwischenspeichern häufig der erste Schritt, und Memcached oder Redis sind normalerweise die ersten Anlaufstellen.

Diese bekannten Cache-Engines weisen eine Reihe von Ähnlichkeiten auf, weisen jedoch auch wichtige Unterschiede auf. Redis, der neuere und vielseitigere der beiden, ist fast immer die bessere Wahl.

Redis vs. Memcached zum Zwischenspeichern

Beginnen wir mit den Ähnlichkeiten. Sowohl Memcached als auch Redis dienen als speicherinterne Schlüsselwertspeicher, obwohl Redis genauer als Datenstrukturspeicher beschrieben wird. Sowohl Memcached als auch Redis gehören zur NoSQL-Familie von Datenverwaltungslösungen und beide basieren auf einem Schlüsselwert-Datenmodell. Beide speichern alle Daten im RAM, was sie natürlich als Caching-Schicht äußerst nützlich macht. In Bezug auf die Leistung sind die beiden Datenspeicher ebenfalls bemerkenswert ähnlich und weisen hinsichtlich Durchsatz und Latenz nahezu identische Eigenschaften (und Metriken) auf.

Sowohl Memcached als auch Redis sind ausgereifte und äußerst beliebte Open Source-Projekte. Memcached wurde ursprünglich 2003 von Brad Fitzpatrick für die LiveJournal-Website entwickelt. Seitdem wurde Memcached in C umgeschrieben (die ursprüngliche Implementierung war in Perl) und öffentlich zugänglich gemacht, wo es zu einem Eckpfeiler moderner Webanwendungen geworden ist. Die aktuelle Entwicklung von Memcached konzentriert sich eher auf Stabilität und Optimierungen als auf das Hinzufügen neuer Funktionen.

Redis wurde 2009 von Salvatore Sanfilippo gegründet und Sanfilippo ist bis heute der Hauptentwickler des Projekts. Redis wird manchmal als "Memcached on Steroids" beschrieben, was angesichts der Tatsache, dass Teile von Redis als Reaktion auf Lehren aus der Verwendung von Memcached gebaut wurden, kaum überraschend ist. Redis hat mehr Funktionen als Memcached und ist daher leistungsfähiger und flexibler.

Memcached und Redis werden von vielen Unternehmen und in unzähligen unternehmenskritischen Produktionsumgebungen verwendet und von Client-Bibliotheken in allen erdenklichen Programmiersprachen unterstützt. Sie sind in einer Vielzahl von Paketen für Entwickler enthalten. Tatsächlich handelt es sich um einen seltenen Webstack, der weder Memcached noch Redis integriert unterstützt.

Warum sind Memcached und Redis so beliebt? Sie sind nicht nur äußerst effektiv, sondern auch relativ einfach. Der Einstieg in Memcached oder Redis ist für einen Entwickler eine einfache Aufgabe. Das Einrichten und Arbeiten mit einer Anwendung dauert nur wenige Minuten. Ein geringer Zeit- und Arbeitsaufwand kann sich daher unmittelbar und dramatisch auf die Leistung auswirken - normalerweise um Größenordnungen. Eine einfache Lösung mit großem Nutzen; Das ist so nah wie möglich an der Magie.

Wann wird Memcached verwendet?

Memcached kann vorzuziehen sein, wenn relativ kleine und statische Daten wie HTML-Codefragmente zwischengespeichert werden. Die interne Speicherverwaltung von Memcached ist zwar nicht so ausgefeilt wie die von Redis, in den einfachsten Anwendungsfällen jedoch effizienter, da vergleichsweise weniger Speicherressourcen für Metadaten verbraucht werden. Zeichenfolgen (der einzige von Memcached unterstützte Datentyp) eignen sich ideal zum Speichern von Daten, die nur gelesen werden, da Zeichenfolgen keine weitere Verarbeitung erfordern.

Bei großen Datenmengen handelt es sich häufig um serialisierte Daten, für deren Speicherung immer mehr Speicherplatz erforderlich ist. Während Memcached effektiv auf das Speichern von Daten in serialisierter Form beschränkt ist, können die Datenstrukturen in Redis jeden Aspekt der Daten nativ speichern, wodurch der Serialisierungsaufwand verringert wird.

Das zweite Szenario, in dem Memcached einen Vorteil gegenüber Redis hat, ist die Skalierung. Da Memcached Multithreading ist, können Sie leicht skalieren, indem Sie ihm mehr Rechenressourcen zur Verfügung stellen. Sie verlieren jedoch einen Teil oder alle zwischengespeicherten Daten (abhängig davon, ob Sie konsistentes Hashing verwenden). Redis, das meistens aus einem Thread besteht, kann ohne Clusterverlust horizontal über Cluster skaliert werden. Clustering ist eine effektive Skalierungslösung, die Einrichtung und der Betrieb sind jedoch vergleichsweise komplexer.

Wann man Redis benutzt

Sie werden Redis wegen seiner Datenstrukturen fast immer verwenden wollen. Mit Redis als Cache erhalten Sie viel Leistung (z. B. die Möglichkeit, den Cache-Inhalt und die Haltbarkeit zu optimieren) und insgesamt eine höhere Effizienz. Sobald Sie die Datenstrukturen verwenden, wird die Effizienzsteigerung für bestimmte Anwendungsszenarien enorm.

Die Überlegenheit von Redis zeigt sich in fast allen Aspekten der Cache-Verwaltung. Caches verwenden einen Mechanismus namens Datenräumung, um Platz für neue Daten zu schaffen, indem alte Daten aus dem Speicher gelöscht werden. Der Datenräumungsmechanismus von Memcached verwendet einen zuletzt verwendeten Algorithmus und entfernt Daten, deren Größe den neuen Daten ähnelt, willkürlich.

Im Gegensatz dazu ermöglicht Redis eine differenzierte Kontrolle der Räumung, sodass Sie aus sechs verschiedenen Räumungsrichtlinien auswählen können. Redis verwendet auch ausgefeiltere Ansätze für die Speicherverwaltung und die Auswahl von Räumungskandidaten. Redis unterstützt sowohl die verzögerte als auch die aktive Räumung, bei der Daten nur dann entfernt werden, wenn mehr Speicherplatz benötigt wird oder proaktiv. 

Redis bietet Ihnen viel mehr Flexibilität hinsichtlich der Objekte, die Sie zwischenspeichern können. Während Memcached die Schlüsselnamen auf 250 Byte begrenzt und nur mit einfachen Zeichenfolgen funktioniert, lässt Redis zu, dass Schlüsselnamen und -werte jeweils bis zu 512 MB groß sind, und sie sind binärsicher. Darüber hinaus stehen Redis fünf primäre Datenstrukturen zur Auswahl, die dem Anwendungsentwickler durch intelligentes Caching und Manipulation zwischengespeicherter Daten eine Vielzahl von Möglichkeiten eröffnen.

Redis für Datenpersistenz

Die Verwendung von Redis-Datenstrukturen kann mehrere Aufgaben vereinfachen und optimieren - nicht nur beim Zwischenspeichern, sondern auch dann, wenn die Daten dauerhaft und immer verfügbar sein sollen. Anstatt Objekte als serialisierte Zeichenfolgen zu speichern, können Entwickler beispielsweise einen Redis-Hash verwenden, um die Felder und Werte eines Objekts zu speichern und sie mit einem einzigen Schlüssel zu verwalten. Redis Hash erspart Entwicklern die Notwendigkeit, die gesamte Zeichenfolge abzurufen, zu deserialisieren, einen Wert zu aktualisieren, das Objekt erneut zu reserialisieren und die gesamte Zeichenfolge im Cache bei jeder einfachen Aktualisierung durch ihren neuen Wert zu ersetzen. Dies bedeutet einen geringeren Ressourcenverbrauch und eine höhere Leistung.

Andere von Redis angebotene Datenstrukturen (wie Listen, Mengen, sortierte Mengen, Hyperloglogs, Bitmaps und Geodatenindizes) können verwendet werden, um noch komplexere Szenarien zu implementieren. Sortierte Sätze für die Aufnahme und Analyse von Zeitreihendaten sind ein weiteres Beispiel für eine Redis-Datenstruktur, die eine enorm reduzierte Komplexität und einen geringeren Bandbreitenverbrauch bietet.

Ein weiterer wichtiger Vorteil von Redis ist, dass die darin gespeicherten Daten nicht undurchsichtig sind, sodass der Server sie direkt bearbeiten kann. Ein beträchtlicher Teil der über 180 in Redis verfügbaren Befehle ist für Datenverarbeitungsvorgänge und die Einbettung von Logik in den Datenspeicher selbst über serverseitiges Lua-Scripting bestimmt. Diese integrierten Befehle und Benutzerskripte bieten Ihnen die Flexibilität, Datenverarbeitungsaufgaben direkt in Redis zu erledigen, ohne Daten zur Verarbeitung über das Netzwerk an ein anderes System senden zu müssen.

Redis bietet eine optionale und einstellbare Datenpersistenz, mit der der Cache nach einem geplanten Herunterfahren oder einem ungeplanten Fehler gebootet werden kann. Während wir die Daten in Caches tendenziell als flüchtig und vorübergehend betrachten, können persistente Daten auf der Festplatte in Caching-Szenarien sehr wertvoll sein. Wenn die Daten des Caches unmittelbar nach dem Neustart zum Laden verfügbar sind, wird das Aufwärmen des Caches erheblich verkürzt, und die Last, die beim erneuten Auffüllen und Neuberechnen des Cache-Inhalts erforderlich ist, wird aus dem primären Datenspeicher entfernt.

Redis In-Memory-Datenreplikation 

Redis kann auch die von ihm verwalteten Daten replizieren. Die Replikation kann zum Implementieren eines hochverfügbaren Cache-Setups verwendet werden, das Fehlern standhält und der Anwendung einen unterbrechungsfreien Dienst bietet. Ein Cache-Fehler bleibt in Bezug auf die Auswirkungen auf die Benutzererfahrung und die Anwendungsleistung nur geringfügig hinter dem Anwendungsfehler zurück. Daher ist eine bewährte Lösung, die den Inhalt des Caches und die Verfügbarkeit des Dienstes garantiert, in den meisten Fällen ein großer Vorteil.

Last but not least bietet Redis im Hinblick auf die betriebliche Sichtbarkeit eine Reihe von Metriken und eine Fülle von introspektiven Befehlen, mit denen die Nutzung und das abnormale Verhalten überwacht und verfolgt werden können. Echtzeitstatistiken zu allen Aspekten der Datenbank, zur Anzeige aller ausgeführten Befehle, zur Auflistung und Verwaltung von Clientverbindungen - all das und noch viel mehr bietet Redis.

Wenn Entwickler die Effektivität der Persistenz- und In-Memory-Replikationsfunktionen von Redis erkennen, verwenden sie diese häufig als Ersthelferdatenbank, um normalerweise Hochgeschwindigkeitsdaten zu analysieren und zu verarbeiten und dem Benutzer Antworten zu geben, während eine sekundäre (häufig langsamere) Datenbank verwaltet wird eine historische Aufzeichnung dessen, was passiert ist. Auf diese Weise kann Redis auch ideal für Analytics-Anwendungsfälle sein.

Redis für die Datenanalyse

Drei Analyseszenarien fallen sofort ein. Wenn Sie im ersten Szenario etwas wie Apache Spark verwenden, um große Datenmengen iterativ zu verarbeiten, können Sie Redis als Serving-Layer für Daten verwenden, die zuvor von Spark berechnet wurden. Im zweiten Szenario kann die Verwendung von Redis als gemeinsam genutzter verteilter Datenspeicher im Arbeitsspeicher die Spark-Verarbeitungsgeschwindigkeit um den Faktor 45 bis 100 beschleunigen. Schließlich ist ein allzu häufiges Szenario ein Szenario, in dem Berichte und Analysen anpassbar sein müssen Das Abrufen von Daten aus inhärenten Batch-Datenspeichern (wie Hadoop oder einem RDBMS) dauert zu lange. In diesem Fall ist ein speicherinterner Datenstrukturspeicher wie Redis der einzige praktische Weg, um Paging- und Antwortzeiten im Submillisekundenbereich zu erhalten.

Wenn Sie extrem große Betriebsdatensätze oder Analyse-Workloads verwenden, ist es möglicherweise nicht kosteneffektiv, alles im Speicher auszuführen. Um eine Leistung von weniger als einer Millisekunde bei geringeren Kosten zu erzielen, hat Redis Labs eine Version von Redis erstellt, die auf einer Kombination aus RAM und Flash ausgeführt wird, mit der Option, RAM-zu-Flash-Verhältnisse zu konfigurieren. Dies eröffnet zwar mehrere neue Möglichkeiten zur Beschleunigung der Workload-Verarbeitung, bietet Entwicklern jedoch auch die Möglichkeit, ihren „Cache auf Flash“ einfach auszuführen.

Open Source Software bietet weiterhin einige der besten heute verfügbaren Technologien. Wenn es darum geht, die Anwendungsleistung durch Caching zu steigern, sind Redis und Memcached die etabliertesten und produktionserprobtesten Kandidaten. Angesichts der umfangreicheren Funktionalität, des fortschrittlicheren Designs, der vielen Verwendungsmöglichkeiten und der höheren Kosteneffizienz in großem Maßstab sollte Redis jedoch in fast allen Fällen Ihre erste Wahl sein.

--- ---.

Itamar Haber (@itamarhaber) ist Chief Developer Advocate bei Redis Labs, das Memcached und Redis als vollständig verwaltete Cloud-Services für Entwickler anbietet. Seine vielfältigen Erfahrungen umfassen die Entwicklung und Verwaltung von Softwareprodukten sowie Führungspositionen bei Xeround, Etagon, Amicada und MNS Ltd. Itamar hat einen Master of Business Administration des gemeinsamen Kellogg-Recanati-Programms der Universitäten Northwestern und Tel Aviv sowie einen Bachelor der Wissenschaft in der Informatik.

Das New Tech Forum bietet einen Ort, an dem Sie neue Unternehmenstechnologien in beispielloser Tiefe und Breite erkunden und diskutieren können. Die Auswahl ist subjektiv, basierend auf unserer Auswahl der Technologien, die wir für wichtig und für die Leser von größtem Interesse halten. akzeptiert keine Marketingmaterialien zur Veröffentlichung und behält sich das Recht vor, alle eingebrachten Inhalte zu bearbeiten. Senden Sie alle Anfragen an [email protected]