Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Cristiano Vicente
Tiago Franco

Min Read

19. April 2024

Memcached vs Redis: welches soll man wählen?

Wenn Sie über eine serverseitige Caching-Lösung nachdenken, haben Sie wahrscheinlich von Redis oder Memcached gehört.

Beides Redis und Memcached sind:

  • In-Memory-Datenspeichersysteme mit NoSQL-Schlüsselwerten
  • Open Source
  • wird verwendet, um Anwendungen zu beschleunigen
  • unterstützt von den großen Cloud-Dienstanbietern

Was ist der Unterschied zwischen Memcached und Redis?

Memcached und Redis speichern beide Daten im Speicher, um die Anwendungsgeschwindigkeit zu erhöhen, aber sie erfüllen unterschiedliche Anforderungen.

  • Memcached ist einfach, bietet grundlegenden Schlüsselwertspeicher und zeichnet sich durch seine Multithread-Leistung beim schnellen Zwischenspeichern von Daten aus.
  • Redis unterstützt jedoch komplexere Datentypen und permanente Datenspeicherung und ist daher vielseitig für ein breiteres Aufgabenspektrum wie Messaging und Sitzungsmanagement einsetzbar. Es bietet auch erweiterte Optionen wie Daten-Sharding und verschiedene Räumungsrichtlinien, sodass es für komplexere Anwendungen geeignet ist.

Aber lassen Sie uns die Unterschiede in diesem Artikel genauer untersuchen. Basierend auf einem Projekt, das wir für einen Kunden entwickelt haben, werde ich Folgendes behandeln wie sie mit der Datenspeicherung umgehen, Skalierbarkeit und welches schneidet besser ab unter Berücksichtigung bestimmter Szenarien. Aber lassen Sie uns zuerst mit den Grundlagen beginnen.

blue arrow to the left
Imaginary Cloud logo

Was ist Redis

Redis, was Remote Dictionary Server bedeutet, wurde 2009 von Salvatore Sanfilippo entwickelt, um die Skalierbarkeit des Weblog-Analyzers zu verbessern, den sein italienisches Startup entwickelte. Der erste Prototyp wurde in Tcl geschrieben und später in C transkribiert. Als Sanfilippo beschloss, das Projekt als Open Source anzubieten, gewann es langsam an Fahrt. Giganten wie GitHub und Instagram waren einige der ersten Unternehmen, die es eingeführt haben.

blue arrow to the left
Imaginary Cloud logo

Was ist Memcached

Memcached wurde etwas früher, 2003, von Brad Fitzpatrick für seine LiveJournal-Website erstellt. Es wurde ursprünglich in Perl entwickelt und dann in C übersetzt. Es wird von einigen der größten Unternehmen wie Facebook, Youtube und Twitter verwendet.

blue arrow to the left
Imaginary Cloud logo

Datenspeicher: Memcached vs Redis

Wie Redis Daten speichert

Redis hat fünf Datentypen:

  • Schnur: ein Textwert
  • Hash: Eine Hashtabelle mit Zeichenkettenschlüsseln und -werten
  • Liste: Eine Liste von Zeichenkettenwerten
  • Set: Eine sich nicht wiederholende Liste von Zeichenkettenwerten
  • Sortiertes Set: Eine sich nicht wiederholende Liste von Zeichenkettenwerten, sortiert nach einem Score-Wert

Redis unterstützt Datentypoperationen. Das bedeutet, dass Sie auf Teile eines Datenobjekts zugreifen oder es ändern können, ohne das gesamte Objekt auf Anwendungsebene laden, es ändern und dann die aktualisierte Version erneut speichern zu müssen. Redis verwendet eine gekapselte Version der Malloc/Free-Speicherverwaltung, was im Vergleich zum Memcached Slab-Mechanismus ein einfacherer Ansatz ist, wie ich weiter unten erläutern werde. Redis unterstützt Schlüssel mit einer maximalen Größe von 512 MB und auch Werte bis zu 512 MB. Dieses Limit gilt pro Element für aggregierte Datentypen (Listen und Sets).

So speichert Memcached Daten

Im Gegensatz zu Redis Memcached hat keine Datentypen, da es Zeichenketten speichert, die durch einen Zeichenkettenschlüssel indiziert sind. Im Vergleich zu Redis es verbraucht weniger Overhead-Speicher. Außerdem ist es durch die Größe des Speichers auf dem Computer begrenzt, und wenn es voll ist, beginnt es, Werte in der Reihenfolge zu löschen, in der sie am wenigsten verwendet wurde. Es verwendet einen Zuweisungsmechanismus namens Slab, der den zugewiesenen Speicher in Blöcke unterschiedlicher Größe unterteilt und Schlüsselwert-Datensätze der entsprechenden Größe speichert. Dies löst das Problem der Speicherfragmentierung. Memcached unterstützt Schlüssel mit einer maximalen Größe von 250 B und Werten bis zu 1 MB. Beachten Sie jedoch, dass dies nur die Standardeinstellung ist und beim Start geändert werden kann, indem Sie die maximale Plattengröße erhöhen.

Vorteile des Datentyps

Nehmen wir das einfache Beispiel der Verwendung eines Caches zum Speichern eines Benutzersitzungsobjekts.
Wenn wir Memcached verwenden, um ein einzelnes Feld im Objekt zu ändern, muss die Zeichenfolge geladen, deserialisiert, das Objektfeld bearbeitet, serialisiert und gespeichert werden. Wenn wir Redis verwenden, kann der Hash-Datentyp verwendet werden. Es ermöglicht den Zugriff auf jedes Feld im Hash einzeln, sodass jede CRUD-Operation (Create, Read, Update, Delete) auf jedem von ihnen ausgeführt werden kann. Dies ermöglicht es, die Notwendigkeit, dies auf Anwendungsebene zu tun, zu verringern. Dies führt zu Effizienz, sobald weniger I/O-Operationen erforderlich sind.

New call-to-action
blue arrow to the left
Imaginary Cloud logo

So skalieren Redis und Memcached

So skaliert Redis

Seit Redis ist überwiegend Singlethread-fähig und hat native Unterstützung für Clustering, es wächst gut horizontal.


Redis-Clustering funktioniert mit einer Master/Slave-Architektur. Für jeden Master-Knoten gibt es aus Redundanzgründen zwei Slave-Knoten. Wenn also der Master ausfällt, befördert das System automatisch einen der Slaves zum neuen Master. Diese Art der Skalierbarkeit hat den Nachteil, dass die Wartung komplex ist. Es ist schwieriger, mehrere Knoten synchron laufen zu lassen als einen einzelnen.

So skaliert Memcached

Memcached lässt sich leicht vertikal skalieren, als es ist multithreading. Die einzigen Anforderungen bestehen darin, ihm mehr Kerne und mehr Speicher zu geben. Es kann auf der Client-Seite auch horizontal skaliert werden, indem ein verteilter Algorithmus implementiert wird. Dies hat den Nachteil, dass die Implementierung komplexer ist, während Redis es sofort einsatzbereit hat.

Bei der Entscheidung, ob Redis oder Memcached verwendet werden soll, besteht ein wesentlicher Unterschied zwischen diesen beiden in der Datenpersistenz.

Während Redis ist (meistens) ein speicherinterner Datenspeicher und es ist nicht volatil, Memcached ist ein In-Memory-Cache und es ist volatil.

Ebenfalls Memcached ist auf die LRU-Räumungsrichtlinie (Least Recently Used) beschränkt während Redis unterstützt sechs verschiedene Richtlinien:

  • Keine Räumung Wenn ein Fehler zurückgegeben wird, ist das Speicherlimit erreicht.
  • Alle Schlüssel LRU Schlüssel werden von den zuletzt verwendeten zuerst entfernt
  • Flüchtiges LRU Entfernen von Schlüsseln, für die eine Ablaufzeit festgelegt wurde, durch den zuletzt zuletzt verwendeten Schlüssel
  • Alle Schlüssel zufällig Schlüssel nach dem Zufallsprinzip entfernen
  • Volatil zufällig Löschen von Schlüsseln, für die eine Ablaufzeit festgelegt wurde, nach dem Zufallsprinzip
  • Flüchtiges TTL Schlüssel, für die eine bestimmte Ablaufzeit festgelegt wurde, werden zuerst nach der kürzesten Gültigkeitsdauer entfernt.
blue arrow to the left
Imaginary Cloud logo

Wie Redis Persistenz erreicht

Redis unterstützt Persistenz, daher wird es auf zwei verschiedene Arten als Datenspeicher bezeichnet:

  • RDB-Snapshot: Ist ein Point-in-Time-Snapshot Ihres gesamten Datensatzes, der in einer Datei auf der Festplatte gespeichert und in bestimmten Intervallen ausgeführt wird. Auf diese Weise kann der Datensatz beim Start wiederhergestellt werden.
  • AOF Protokoll: Ist ein Append Only File-Protokoll aller auf dem Redis-Server ausgeführten Schreibbefehle. Diese Datei wird ebenfalls auf der Festplatte gespeichert. Wenn Sie also alle Befehle in ihrer Reihenfolge erneut ausführen, kann ein Datensatz beim Start wiederhergestellt werden.

Diese Dateien werden von einem untergeordneten Prozess verarbeitet. Dies ist ein Schlüsselfaktor bei der Entscheidung, welche Art von Persistenz verwendet werden soll.

Wenn der in Redis gespeicherte Datensatz zu groß ist, dauert die Erstellung der RDB-Datei einige Zeit, was sich auf die Antwortzeit auswirkt. Auf der anderen Seite wird es beim Hochfahren schneller geladen werden als das AOF-Protokoll.

Das Das AOF-Protokoll ist besser, wenn Datenverlust überhaupt nicht akzeptabel ist, da es bei jedem Befehl aktualisiert werden kann. Es gibt auch keine Korruptionsprobleme, da es sich um eine Datei handelt, die nur zum Anhängen verwendet werden kann. Es kann jedoch viel größer werden als ein RDB-Snapshot.

blue arrow to the left
Imaginary Cloud logo

Anwendungsfälle und Leistung

Redis-Anwendungsfälle:


1. Sitzungs-Caching in Webanwendungen: Redis kann Benutzersitzungsdaten für Webanwendungen speichern, was besonders für Plattformen mit einer großen Anzahl gleichzeitiger Benutzer nützlich ist. Beispielsweise kann eine E-Commerce-Website Redis verwenden, um Benutzersitzungen schnell abzurufen, ohne die Datenbank aufrufen zu müssen. Dadurch wird das Benutzererlebnis beim An- und Auschecken beschleunigt.

2. Analytik in Echtzeit: Die Datenstrukturen von Redis wie sortierte Sets und Hashes können verwendet werden, um Analyse-Dashboards in Echtzeit zu implementieren. Beispielsweise könnte eine Social-Media-Plattform Redis verwenden, um die Anzahl der aktiven Benutzer oder der Trendbeiträge in Echtzeit zu verfolgen und anzuzeigen.

3. Message Queuing- und Chat-Anwendungen: Die Pub/Sub-Funktionen von Redis ermöglichen Nachrichtenwarteschlangensysteme in Echtzeit. Es kann verwendet werden, um Chat-Anwendungen zu erstellen, bei denen Nachrichten sofort an verschiedene Abonnenten übermittelt werden müssen.

4. Bestenlisten und es werden immer mehr: Spiele und soziale Plattformen verwenden Redis häufig zur Verwaltung von Bestenlisten, da es hohe Schreib- und Leseraten bewältigen kann. Beispielsweise kann eine Online-Gaming-Plattform Redis verwenden, um Spielerranglisten in Echtzeit zu aktualisieren und anzuzeigen.

5. Ganzseitiger Cache (FPC): Redis kann als FPC verwendet werden, um die Ausgabe von Datenbankabfragen zu speichern und die Belastung der Datenbank zu reduzieren. Beispielsweise kann ein Content Management System (CMS) Redis verwenden, um Seiten zwischenzuspeichern und sie schnell bereitzustellen, ohne sie bei jeder Anfrage neu generieren zu müssen.

Anwendungsfälle für Memcached:


1. Einfaches Zwischenspeichern von Zeichenketten: Memcached ist ideal für kleine und mittelgroße Websites, die eine einfache Caching-Ebene für Zeichenketten benötigen. Eine Blog-Website kann es beispielsweise verwenden, um die Ergebnisse von Datenbankabfragen für Blogbeiträge zwischenzuspeichern und sie den Besuchern schneller zur Verfügung zu stellen.

2. Zwischenspeichern der Ergebnisse von Datenbankabfragen: Memcached kann verwendet werden, um die Ergebnisse von Datenbankabfragen, auf die häufig zugegriffen wird, zwischenzuspeichern, wodurch die Datenbanklast reduziert wird. Ein Online-Katalogsystem könnte es verwenden, um Produktlisten und Details zwischenzuspeichern.

3. Zwischenspeichern von HTML-Fragmenten: Websites mit statischen HTML-Fragmenten, deren Generierung teuer ist, können Memcached verwenden, um diese Fragmente zu speichern. Beispielsweise könnte eine Nachrichtenwebsite Artikelausschnitte auf der Startseite zwischenspeichern, um die Ladezeiten zu verkürzen.

4. Begrenzung der API-Rate: Die atomaren Inkrement- und Dekrementierungsoperationen von Memcached können verwendet werden, um eine API-Ratenbegrenzung zu implementieren. Eine RESTful-API könnte Memcached verwenden, um die Anzahl der Anfragen eines Benutzers innerhalb eines bestimmten Zeitrahmens zu verfolgen und so Missbrauch zu verhindern.

5. Sitzungsspeicher: Ähnlich wie Redis kann Memcached zum Speichern von Benutzersitzungen verwendet werden, allerdings ohne Persistenz. Dies eignet sich für Anwendungen, bei denen Sitzungsdaten vorübergehend sind und ohne nennenswerte Auswirkungen verloren gehen können, z. B. bei zustandslosen Microservices.

blue arrow to the left
Imaginary Cloud logo

Was ist besser: Memcached oder Redis

Es hängt sicherlich von den Anforderungen ab.

Redis ist sicherlich flexibler und leistungsfähiger, aber Memcached erfüllt einige Zwecke sehr gut und erzielt in einigen Fällen eine bessere Leistung. Da es über mehrere Threads verfügt, hat es Vorteile, insbesondere bei der Arbeit mit großen Datenmengen.


Redis unterstützt Datenoperationen dank seiner Datentypen, die Fallszenarien beschleunigen können, indem die Anzahl der Netzwerk-I/O und die Datengrößen reduziert werden. Diese Datenoperationen sind so umfangreich wie ein Get oder Set.

Bei Imaginary Cloud wir haben beide verwendet in viele verschiedene Kundenprojekte. In einer, an der ich beteiligt war, mussten wir zwischen den beiden Optionen wählen. Zuerst haben wir Memcached verwendet aufgrund seiner Einfachheit, Benutzerfreundlichkeit und einfachen Einrichtung. Wir brauchten lediglich einen Cache, sodass Persistenz keine Voraussetzung war. Obwohl, nach einigen Tests, Wir haben uns aufgrund der Vorteile von Datentypen für einen Wechsel zu Redis entschieden.

In diesem Projekt waren die Datentypoperationen ein Vorteil für die Art der Daten, die gespeichert werden sollten. Außerdem bietet Redis einen Befehl zur Suche nach Schlüsseln, die einem Muster entsprechen, sowie viele andere nützliche Befehle für den Umgang mit Schlüsseln. Das war für uns wirklich nützlich und ein wichtiger Punkt bei der Entscheidung, zu Redis zu migrieren.

Was die Migration anbelangt, so war sie sehr einfach durchzuführen, da Redis die meisten Befehle unterstützt, die Memcached ausführt. Hätten wir die Route umgekehrt und beschlossen, von Redis zu Memcached zu migrieren, wäre das viel schwieriger gewesen, da Memcached keine Datentypen hat. Jeder Redis-Datentypbefehl wäre in viele Befehle übersetzt worden, zusammen mit einer gewissen Datenverarbeitung dazwischen, um das gleiche Ergebnis zu erzielen.

Wenn es darum geht, eine Entscheidung zu treffen, können wir nicht wirklich sagen, dass eine besser ist als die andere, da alles von den Projektanforderungen abhängt. Aufgrund unserer Erfahrung ist es jedoch wichtig, die Vor- und Nachteile von Anfang an abzuwägen, um Änderungen und Migrationen während des Projekts zu vermeiden.

Join us and find out about our exciting projects!

Fanden Sie diesen Artikel hilfreich? Diese könnten dir auch gefallen!

blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
blue arrow to the left
Imaginary Cloud logo
Cristiano Vicente
Cristiano Vicente

Webentwickler bei Imaginary Cloud, der von Node.js und allem, was mit Backend-Entwicklung zu tun hat, begeistert ist.

Read more posts by this author
Tiago Franco
Tiago Franco

CEO von Imaginary Cloud und Mitautor des Buches Product Design Process. Ich mag Essen, Wein und Krav Maga (nicht unbedingt in dieser Reihenfolge).

Read more posts by this author

People who read this post, also found these interesting:

arrow left
arrow to the right
Dropdown caret icon