Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Redis vs. Memcached – Vergleich 2021

Redis steht für RE Knoten DI ctionary S erver, gegründet 2009 von Salvatore Sanfilippo. Memcached hingegen wurde 2003 von Brad Fitzpatrick entwickelt. Sowohl Redis als auch Memcached sind:

  • NoSQL-In-Memory-Datenstrukturen
  • Geschrieben in C
  • Open-Source
  • Wird verwendet, um Anwendungen zu beschleunigen
  • Unterstützt eine Latenz von weniger als einer Millisekunde

Im Jahr 2014 schrieb Salvatore einen hervorragenden StackOverflow-Beitrag darüber, wann es sinnvoller ist, Memcached als Redis zu verwenden. In diesem Beitrag bieten wir einen aktuellen und detaillierten Vergleich zwischen Redis und Memcached, damit Sie eine fundierte Entscheidung über deren Verwendung in Ihrer Anwendung treffen können.

Infografik

Dieser Beitrag wurde in der folgenden Infografik zusammengefasst. Mit dieser Infografik können Sie die Ergebnisse dieses Vergleichs leicht visualisieren, um zu sehen, welches in verschiedenen Szenarien am besten abschneidet. Wenn Sie den Vergleich im Textformat lesen möchten, klicken Sie hier.

Dokumentation

Zunächst einmal ist Redis viel umfassender dokumentiert als Memcached. Dies erleichtert das Erlernen, Verwalten und Verwenden.

Datenbankmodell

Redis ist in erster Linie ein Key-Value-Store. Während Schlüssel binäre Zeichenfolgen sind, besteht der Vorteil bei Redis darin, dass der Wert nicht nur auf binäre Zeichenfolgen beschränkt ist. Sie können eine Vielzahl von Datenstrukturen sein, die das Speichern komplexer Objekte ermöglichen und eine Vielzahl von Operationen für sie bereitstellen. Redis sieht auch eine Erweiterbarkeit über Redis-Module vor. Redis-Module sind Erweiterungen, die zusätzliche Datenstrukturen und Funktionen bereitstellen, die im Kernfunktionssatz nicht verfügbar sind. Hier ist ein Beispiel einiger Funktionen, die jetzt als Module verfügbar sind:

  • Dokumentspeicher
  • Graph-DBMS
  • Suchmaschine
  • Zeitreihen-DBMS

Memcached ist ein einfacher Schlüsselwertspeicher, der nur binäre Zeichenfolgen als Wert unterstützt.

Datenstrukturen

Wie oben erwähnt, bietet Redis mehrere Datenstrukturtypen, die eine äußerst flexible Verwendung ermöglichen, darunter Strings, Hashes, Listen, Sets, sortierte Sets, Bitmaps, Bitfields, HyperLogLog, Geodaten-Indizes und Streams. Mehr darüber erfahren Sie in diesem Artikel Top Redis Use Cases by Core Data Structure Types.

Bildquelle:https://redislabs.com/redis-enterprise/data-structures/

Memcached unterstützt nur einfache binäre Zeichenfolgen, die sich hervorragend für schreibgeschützte Daten eignen. Wenn Sie also nicht den ganzen Schnickschnack von Redis benötigen, ist Memcached eine einfachere Datenbank für Sie zu verwenden.

Datenbankrang und Popularität

Die größere Popularität einer Datenbank führt zu einer größeren Benutzergemeinschaft, mehr Diskussionen und benutzergenerierten Tutorials und mehr Hilfe und Unterstützung durch Tools von Drittanbietern wie DBaaS-Plattformen und Analysetools zur Optimierung Ihrer Bereitstellungen.

Redis ist laut DB-Engines aufgrund seiner Einfachheit, reichhaltigen Datenstrukturen und großartigen Dokumentation im Februar 2021 die achtbeliebteste Datenbank der Welt. Memcached ist derzeit die 28. beliebteste Datenbank. Wenn Redis und Memcached in Bezug auf Key-Value-Datenbankmodelle eingestuft werden, steht Redis auf Platz 1 und Memcached auf Platz 4. Wenn Sie jedoch nur nach einer Open-Source-Schlüssel-Wert-Datenbank suchen oder eine, die vor Ort bereitgestellt werden kann, kommt Memcached an zweiter Stelle, da sowohl Amazon DynamoDB als auch Microsoft Azure Cosmos DB beides kommerzielle Datenbanken sind, die nur in bereitgestellt werden können die Wolke.

Architektur

Redis und Memcached folgen beide dem Client-Server die Architektur. Clients füllen die Daten im Server in Form von Schlüsselwerten auf.

Redis ist Single-Threaded, während Memcached andererseits eine Multithread-Architektur hat. Memcached skaliert besser auf einem System mit mehr Kernen, die mehr Operationen verarbeiten können, wenn die Rechenkapazität skaliert wird. Es kann jedoch mehr als eine Redis-Instanz auf demselben System initiiert werden, um zusätzliche Kerne zu nutzen.

Benutzerfreundlichkeit

Wie oben im Abschnitt Datenbankmodell erläutert, kann Redis als Multi-Modell-Datenbank mit jeder Art von Datenmodell verwendet werden. In Redis ist es einfach, Code zu schreiben, da es komplexe Aufgaben vereinfacht. Redis verfügt über erweiterte Datenstrukturen und ist nicht auf einfache Zeichenfolgenwerte beschränkt. Wenn Ihre Anwendung beispielsweise Daten in Sätzen speichert und Sie Sätze in einer Liste verfolgen möchten, können Sie dies ganz einfach in Redis tun. Eine ähnliche Aufgabe auf Memcached ist nicht möglich. Es gibt jedoch andere Möglichkeiten, dieselben Aufgaben auszuführen, die mehr Codezeilen erfordern.

Memcached hingegen speichert nur einfache Zeichenfolgenwerte. Die Anwendung muss sich also mit der Komplexität der Datenstruktur befassen.

Datenpartitionierung

Redis unterstützt die Partitionierung von Daten über mehrere Knoteninstanzen hinweg. Aktuelle Benutzer von Redis nutzen verschiedene Techniken wie Bereichspartitionierung, Hash-Partitionierung und konsistentes Hashing für die Datenpartitionierung. In Redis kann die Datenpartitionierung auf drei verschiedene Arten implementiert werden:

  • Clientseitige Partitionierung
  • Proxy-unterstützte Partitionierung (Beispiel:twemproxy)
  • Serverseitige Partitionierung mit Abfrage-Routing innerhalb der Cluster-Knoten

Memcached unterstützt auch die Datenpartitionierung über mehrere Knoten hinweg, und konsistentes Hashing ist ein empfohlener Ansatz, um sicherzustellen, dass die Verkehrslast gleichmäßig verteilt wird.

Redis vs. Memcached – Vergleich 2021Click To Tweet

Unterstützte Sprachen

Redis unterstützt fast alle der am häufigsten verwendeten Programmiersprachen, von Hoch- bis zu Niedrigsprachen. Memcached unterstützt jedoch im Vergleich zu Redis weniger Sprachen, unterstützt aber alle gängigen Sprachen.

Memcache

  • .Net
  • K
  • C++
  • ColdFusion
  • Erlang
  • Java
  • Lispeln
  • Lua
  • OCaml
  • Perl
  • PHP
  • Python
  • Rubin

Redis

  • K
  • C#
  • C++
  • Clojure
  • Kristall
  • D
  • Pfeil
  • Elixier
  • Erlang
  • Fantastisch
  • Los
  • Haskell
  • Haxe
  • Java
  • JavaScript (Node.js)
  • Lispeln
  • Lua
  • MatLab
  • Ziel-C
  • OCaml
  • Pascal
  • Perl
  • PHP
  • Prolog
  • Reine Daten
  • Python
  • R
  • Rebellieren
  • Rubin
  • Rost
  • Skala
  • Schema
  • Smalltalk
  • Schnell
  • TCL
  • Visual Basic

Transaktionen

Redis-„Transaktionen“ werden mit den drei folgenden Garantien ausgeführt:

  • Transaktionen werden serialisiert und nacheinander ausgeführt
  • Entweder alle Befehle oder keine werden verarbeitet (atomare Transaktionen)
  • Optimistic Locking bietet eine zusätzliche Garantie mit Check-and-Set

Redis stellt sicher, dass auf einmal nur ein Befehl von einem Client-Rechner ausgeführt wird. Alle Befehle in den Transaktionen werden ausgeführt, wenn der Befehl „EXEC“ aufgerufen wird, um die Atomarität sicherzustellen.

Memcached hingegen bietet kein Transaktionsmanagement.

Replikation

Redis bietet eine einfache Leader-Follower (Master-Slave)-Replikation, die exakte Kopien der Master-Instanzen erstellt, mit diesen Funktionen:

  • Der Master sendet weiterhin Datenbefehle an den Slave, solange sie verbunden sind.
  • Wenn die Verbindung unterbrochen wird, folgt der Slave einer teilweisen Neusynchronisierung und kopiert nur die Daten, die während der Trennung verloren gegangen sind.
  • Wenn eine teilweise Neusynchronisierung nicht möglich ist, wird eine vollständige Neusynchronisierung versucht.

Sie können auch die Hochverfügbarkeitsfunktionen, Redis Sentinels oder Redis Cluster, für erweiterten Failover-Schutz nutzen.

Natives Memcached unterstützt keine Replikation, aber Sie können Repcached verwenden, einen kostenlosen Open-Source-Patch, um Hochverfügbarkeit für Ihre Bereitstellung zu erreichen. Es bietet Multi-Master-Replikation, asynchrone Datenreplikation und unterstützt alle Memcached-Befehle.

Schnappschüsse/Persistenz

Snapshots sind einfach eine schreibgeschützte Ansicht Ihrer Datenbank, wie sie zu einem bestimmten Zeitpunkt war. Redis unterstützt Snapshots, und standardmäßig speichert Redis Snapshots des Datasets auf der Festplatte in einer Binärdatei namens dump.rdb. Sie können einen Snapshot manuell aufrufen oder die Häufigkeit anpassen oder den Schwellenwert für die Ausführung des Vorgangs ändern.

Hier sind die beiden Persistenzoptionen, die Redis unterstützt:

  • RDB-Persistenz
  • AOF-Persistenz

RDB steht für „Redis Database Backup“. Es handelt sich um eine kompakte Momentaufnahme der Datenbank zu einem bestimmten Zeitpunkt. Es nimmt weniger Speicherplatz ein, maximiert die Redis-Leistung und eignet sich gut für die Notfallwiederherstellung.

AOF steht für „Append Only File“. AOF verfolgt alle ausgeführten Befehle und führt in einer katastrophalen Situation die Befehle erneut aus, um die Daten zurückzubekommen. Diese Methode benötigt mehr Platz, da alle Befehle erneut ausgeführt werden, und ist keine sehr dauerhafte Methode zum Erstellen von Schnappschüssen.

Memcached hingegen unterstützt keine Persistenz auf der Festplatte.

Serverseitige Skripte

Lua ist die eingebettete Skriptsprache für Ihren Redis-Server, verfügbar ab Version 2.6, mit der Sie Vorgänge innerhalb von Redis ausführen können, um Ihren Code zu vereinfachen und die Leistung zu steigern. Die beiden Hauptfunktionen zum Auswerten von Skripten mit dem Lua-Interpreter sind:

  • EVAL
  • EVALSHA

Wenn das Lua-Skript ausgeführt wird, werden alle anderen Anfragen blockiert, wie in der Abbildung unten gezeigt.

Redis enthält auch den Lua-Skript-Debugger in Version 3.2, der das Schreiben komplexer Skripts vereinfacht und die Leistung steigert.

Memcached unterstützt kein serverseitiges Scripting.

Skalierbarkeit

Es gibt zwei Techniken, um Ihre Redis-Datenbank horizontal zu skalieren:

  • Hinzufügen von Shards in Redis-Clustern
  • Hinzufügen von Knoten zu einem Redis HA (Master/Replikat)-Setup

Sie können Ihr Redis-Setup auch vertikal skalieren, wenn Sie mehr Speicher oder Rechenleistung benötigen. Dies kann ohne Ausfallzeit erfolgen, wenn Sie ein HA-Setup haben oder die Redis-Cluster-Technologie verwenden.

Der Memcached-Server bietet keinen Mechanismus zum Verteilen von Daten über Knoten (Sharding). In Memcached ist die horizontale Skalierbarkeit also so einfach wie das Hinzufügen weiterer Knoten – das Problem der Partitionierung Ihrer Daten in verschiedene Shards muss auf Anwendungs-/Clientebene gelöst werden. Es gibt einige Open-Source-Tools, die Ihnen dabei helfen können.

Kommunikationsprotokoll

Redis verwendet TCP als Netzwerkprotokoll und unterstützt UDP nicht.

Memcached unterstützt sowohl das TCP- als auch das UDP-Kommunikationsprotokoll. Daten werden in zwei Formen an den Memcached-Server gesendet:

  • Textzeilen:Befehle senden und Antworten vom Server empfangen.
  • Unstrukturierte Daten:Empfangen oder senden Sie Wertinformationen für einen bestimmten Schlüssel, und die Daten werden im gleichen bereitgestellten Format zurückgegeben.

Unterstützte Cache-Eviction-Richtlinien

Redis unterstützt verschiedene Arten von Entfernungsrichtlinien. Sehen wir uns einige an.

  • keine Räumung:  Bei „noeviction“ wird ein Fehler zurückgegeben, wenn der Speicher seine Grenze erreicht.
  • allkeys-lru:  Lru steht für „am wenigsten verwendet“. Diese Richtlinie entfernt die am längsten verwendeten Daten.
  • allkeys-lfu:  Lfu steht für „am wenigsten häufig verwendet“. Diese Richtlinie entfernt die am wenigsten verwendeten Daten.
  • allkeys-random:  Diese Richtlinie entfernt die Daten nach dem Zufallsprinzip.
  • volatile-lru:  Flüchtige Daten sind mit Ablaufdatensatz. Diese Richtlinie entfernt die am längsten verwendeten flüchtigen Daten.
  • volatile-lfu:  Flüchtige Daten sind mit Ablaufdatensatz. Diese Richtlinie entfernt die am wenigsten verwendeten flüchtigen Daten.
  • volatile-random:  Diese Richtlinie entfernt die flüchtigen Daten nach dem Zufallsprinzip.
  • volatile-ttl:  „TTL“ steht für Time to Live. Diese Richtlinie entfernt die Daten mit der kürzesten Lebensdauer.

Memcached verwendet den LRU-Algorithmus, um Daten zu entfernen, wenn Speicherplatz benötigt wird. Es sucht zuerst nach den bereits abgelaufenen Daten, die gelöscht werden sollen, wenn abgelaufene Daten nicht verfügbar sind, wird der LRU-Algorithmus verwendet.

Nachrichten veröffentlichen und abonnieren

Redis unterstützt Pub/Sub-Messaging (Veröffentlichen und Abonnieren). Es gibt drei Befehle, die für diesen Zweck verwendet werden.

Der Client verwendet:

  • Abonnieren
  • Abbestellen

Abonnieren und Abbestellen werden verwendet, um Nachrichten von einem bestimmten Kanal zu erhalten.

Der Server verwendet:

  • Veröffentlichen

Das „Veröffentlichen“ wird verwendet, um Daten an die Clients zu pushen.

Memcached unterstützt keine Nachrichten zum Veröffentlichen und Abonnieren.

Streams-Unterstützung

Redis unterstützt Kafka-ähnliche Streams mit Version 5.0 oder höher unter Verwendung einer neuen Datenstruktur „Redis Streams“. Redis Streams hat das Konzept von Verbrauchergruppen wie Apache Kafka, das es Client-Anwendungen ermöglicht, Nachrichten auf verteilte Weise zu konsumieren, wodurch es einfach ist, hochverfügbare Systeme zu skalieren und zu erstellen.

Memcached bietet keine native Unterstützung für Streams, aber es gibt Open-Source-Bibliothekstools wie Kafcache für die Stream-Verarbeitung mit geringer Latenz.

Georäumliche Unterstützung

Redis hat eine Datenstruktur namens Geospatial-Indizes, die die Längen- und Breitengraddaten eines Standorts speichert. Sie können verschiedene Operationen mit den Geodaten ausführen, z. B. die Entfernung zwischen zwei Punkten berechnen oder Orte in der Nähe suchen.

Memcached hat keine speziellen Datenstrukturen zur Handhabung von Geodaten.

Leistung

Ein Leistungsvergleich zwischen In-Memory-Schlüsselwert-Datenspeichern ist eher eine intellektuelle Übung als von praktischer Bedeutung – es sei denn, Sie stellen Systeme in einem solchen Umfang bereit, dass dies interessant wird eine Sparmaßnahme. Dies liegt daran, dass solche Speicher E/A-gebunden sind und die Netzwerklatenz normalerweise eine größere Rolle bei der von der Anwendung wahrgenommenen Latenz spielt als die Datenbanklatenz.

Ein praktischerer Leistungsaspekt ist die Speichereffizienz – wie viele Daten können in die gleiche Menge an Speicher gepackt werden. Auch hier variieren die von Redis verwendeten internen Datenstrukturen je nach Datengröße. Daher ist jede Diskussion über die Leistung zwischen diesen Datenbanken mit Vorsicht zu genießen.

Werfen wir einen Blick auf einige Vergleiche, die in einem Forschungsbericht aus dem Jahr 2016 gezeigt werden. In diesem Artikel testen die Autoren die weit verbreiteten In-Memory-Datenbanken, um ihre Leistung in Bezug auf Folgendes zu messen:

  1. Die Zeit, die zum Abschließen von Vorgängen benötigt wird.
  2. Wie effizient sie den Speicher während des Betriebs nutzen.

Im Artikel verwendete Datenbankversionen:

Datenbank Version
Redis 3.0.7
Memcached 1.4.14

Schreibvorgang

Wie Sie in der Tabelle unten sehen können, zeigt Memcached beim Schreiben von Daten eine außergewöhnliche Geschwindigkeit, selbst wenn sich die Anzahl der Datensätze auf Millionen erhöht.

Die berechnete Zeit zum Schreiben von Schlüssel/Wert-Paaren (ms)

Anzahl der Datensätze
Datenbank 1.000 10.000 100.000 1.000.000
Redis 34 214 1.666 14.638
Memcached 23 100 276 2.813

Lesevorgang

Das Lesen von Daten bleibt in Redis selbst für eine Million Datensätze nahezu konsistent, aber in Memcached steigt mit zunehmender Anzahl von Datensätzen auch die Zeit ein wenig.

Die verstrichene Zeit zum Lesen eines Werts, der einem bestimmten Schlüssel pro Datenbank entspricht (ms)

Anzahl der Datensätze
Datenbank 1.000 10.000 100.000 1.000.000
Redis 8 6 8 8
Memcached 9 14 14 30

Speichernutzung

Während der Diskussion über die Speichernutzung ist Redis immer das Beste, wie Sie in den Ergebnissen sehen können.

Speichernutzung von In-Memory-Datenbanken für Schreibvorgänge (MB)

Anzahl der Datensätze
Datenbank 1.000 10.000 100.000 1.000.000
Redis 2.5 3.8 4.3 62,7
Memcached 5.3 27.2 211 264,9

Wie Sie sehen, ist Redis besser als Memcached.

Speichernutzung von In-Memory-Datenbanken für Löschvorgänge (MB)

Anzahl der Datensätze
Datenbank 1.000 10.000 100.000 1.000.000
Redis 0 0 0 0
Memcached 2.2 2.1 2.2 2.2

Verwaltete Dienste/Support

Die größere Popularität und Community für Redis hat auch den Bedarf an Managed Services, Hosting und Support erhöht. Zu den beliebten Anbietern verwalteter Datenbanken für Redis™* gehören ScaleGrid, Redis Labs, AWS Elasticache, Azure Cache und DigitalOcean. Diese Seite bietet einen großartigen Vergleich der Top-Anbieter für Redis™. Redis verfügt auch über umfangreiche interne Berichtstools wie Cache-Treffer, Speichernutzung, Operationen und sogar eine langsame Abfrage, die protokolliert wird.

Managed Services für Memcached sind weit weniger verfügbar, werden aber dennoch von Amazon Elasticache unterstützt.

Transport Layer Security (TLS)-Unterstützung

Redis bietet ab Redis 6.0 native TLS-Unterstützung. Frühere Versionen von Redis empfahlen die Verwendung von Stunnel für die Bereitstellung von TLS-Unterstützung.

Memcached 1.5.13 und höhere Versionen unterstützen Authentifizierung und Verschlüsselung über TLS. Diese Funktion befindet sich noch im Versuchsstadium.

Authentifizierung

Bis zu Redis 5.x unterstützte Redis nur eine einfache passwortbasierte Authentifizierung. Dieses Passwort wurde im Klartext auf dem Server gespeichert. Redis ab Version 6.0 unterstützt eine voll funktionsfähige ACL.

Memcached Version 1.4.3 und höher unterstützt SASL. Zuvor hatte Memcached keine Authentifizierungsschicht.

Zusammenfassung

Redis und Memcached sind beide großartig und haben Anwendungen in verschiedenen Bereichen. Redis, das später entwickelt wird, hat viele erweiterte Funktionen und eine großartige Dokumentation und Community.

Möchten Sie mehr über ScaleGrid erfahren?

Um mehr darüber zu erfahren, wie ScaleGrid Hosting for Redis™* Sie bei der Verwaltung Ihrer Datenbanken unterstützen kann, besuchen Sie unsere Seite ScaleGrid Service for Redis™. Erfahren Sie, wie Sie sich mit ScaleGrid-Hosting für Redis™ mehr auf die Entwicklung Ihres Produkts und weniger auf die Verwaltung von Datenbanken konzentrieren können.

*Redis ist eine Marke von Redis Labs Ltd. Alle Rechte daran sind Redis Labs Ltd vorbehalten. Jegliche Verwendung durch ScaleGrid dient nur zu Referenzzwecken und weist nicht auf Sponsoring oder Billigung hin oder Zugehörigkeit zwischen Redis und ScaleGrid.