Skip to main content

Redis

Was ist Redis?

Redis ist ein Open-Source-Projekt für die Datenstruktur im Arbeitsspeicher, das eine verteilte, im Arbeitsspeicher hinterlegte Schlüsseldatenbank mit optionaler Haltbarkeit implementiert. Es unterstützt verschiedene Arten abstrakter Datenstrukturen, z. B. Strings, Listen, Maps, Sets, sortierte Sets, Hyperloglogs, Bitmaps, Streams und räumliche Indizes. Das Projekt wird hauptsächlich von Salvatore Sanfilippo entwickelt und wird derzeit von Redis Labs gesponsert.

Entstehung

Redis steht für REmote DIctionary Server. Das Projekt begann, als Salvatore Sanfilippo (auch bekannt als antirez, der ursprüngliche Entwickler) versuchte, die Skalierbarkeit seines italienischen Startups zu verbessern, indem er einen Echtzeit-Weblog-Analysator entwickelte. Nach erheblichen Problemen bei der Skalierung bestimmter spezifischer Workloads unter Verwendung herkömmlicher Datenbanksysteme begann Sanfilippo mit dem Prototyp einer ersten Proof-of-Concept-Version von Tcl.

Später übersetzte Sanfilippo diesen Prototyp in die Sprache C und implementierte den ersten Datentyp, das war die Liste. Nach einigen Wochen der internen Verwendung des Projekts mit Erfolg hat Sanfilippo beschlossen, es zu öffnen und kündigte das Projekt den Hacker News an. Das Projekt begann sich zu etablieren, insbesondere in der Ruby-Community. GitHub und Instagram gehörten zu den ersten Unternehmen, die es angenommen hatten.

Sanfilippo wurde im März 2010 von VMmare eingestellt. Im Mai 2013 wurde Redis von Pivotal Software (einer Ausgliederung von VMmare) gesponsert. Im Juni 2015 wurde die Entwicklung von Laps gesponsert.

Unterschiede zu anderen Datenbanksystemen

Das Projekt machte die Idee eines Systems populär, das gleichzeitig als Speicher und Cache angesehen werden kann, wobei ein Design verwendet wird, bei dem Daten immer modifiziert und aus dem Hauptspeicher des Computers gelesen werden, aber auch in einem ungeeigneten Format auf der Festplatte gespeichert werden für den wahlfreien Zugriff auf Daten. Dies jedoch nur, um die Daten nach dem Neustart des Systems wiederherzustellen. Gleichzeitig stellt Redis ein Datenmodell bereit, das im Vergleich zu RDBMs sehr ungewöhnlich ist, da Benutzerbefehle keine von der Datenbank-Engine auszuführende Abfrage beschreiben, sondern bestimmte Vorgänge, die für bestimmte abstrakte Datentypen ausgeführt werden.

Daher müssen die Daten auf eine Weise gespeichert werden, die später für den schnellen Abruf geeignet ist, ohne Hilfe des Datenbanksystems in Form von Sekundärindizes, Aggregationen oder anderen üblichen Merkmalen herkömmlicher RDBMs. Die Implementierung nutzt Fork (system_call) intensiv, um den Prozess zu kopieren, der die Daten enthält, sodass der übergeordnete Prozess weiterhin Clients bedient, während der untergeordnete Prozess eine Kopie der Daten auf der Festplatte erstellt.

Unterstützte Sprachen

Seit Version 2.6 bietet serverseitige Lua-Skripte.

Viele Sprachen haben Redis-Bindungen auf der Clientseite, einschließlich: ActionScript, C, C++, C#, Hühnerschema, Clojure, Common Lisp, Crystal, D, Dart, Elixir, Erlang, Go, Haskell, Haxe, Io, Java, JavaScript (Node.js), Julia, Lua, OCaml, Objective-C, PHP, Perl, Pure Data, Python, R, Ruby, Rust, Scala, Smalltalk, Swift und Tcl. In diesen Sprachen gibt es mehrere Client-Softwareprogramme.

Datentypen

Redis ordnet Schlüssel zu Werttypen zu. Ein wichtiger Unterschied zwischen Redis und anderen strukturierten Speichersystemen besteht darin, dass nicht nur Strings, sondern auch abstrakte Datentypen unterstützt werden:

  • Listen
  • String-Sätze (Sammlung nicht wiederkehrender unsortierter Elemente)
  • Sortierte String-Sätze (Sammlung von sich nicht wiederholenden Elementen, geordnet nach einer Fließkommazahl, die als Score bezeichnet wird)
  • Hash-Tabellen (bei denen Schlüssel und Werte Zeichenfolgen sind)
  • HyperLogLogs (die zur ungefähren Schätzung der Kardinalitätsgröße verwendet werden)
  • Stream von Einträgen mit Verbrauchergruppen
  • Geodaten durch die Implementierung der Geohash-Technik seit Version 3.2

Der Typ eines Werts bestimmt, welche Operationen (als Befehle bezeichnet) für den Wert selbst verfügbar sind. Redis unterstützt atomare, serverseitige Vorgänge auf höchster Ebene, wie Kreuzung, Vereinigung und Differenz zwischen Sätzen und Sortieren von Listen als auch Sätzen und sortierten Sätzen.

Das Redis-Modul ReJSON implementiert ECMA-404 (den JSON Data Interchange Standard) als nativen Datentyp.

Persistenz (Speicherbarkeit eines Objekts)

Redis hält normalerweise die gesamte Datenmenge im Speicher. Versionen bis 2.4 können so konfiguriert werden, dass sie sogenannte virtuelle Speicher verwenden, in denen ein Teil des Datasets auf der Festplatte gespeichert ist. Diese Funktion ist jedoch veraltet. Die Persistenz wird jetzt auf zwei Arten erreicht: Eine wird als Snapshotting bezeichnet und ist ein semi-persistenter Haltbarkeitsmodus, bei dem die Datenmenge von Zeit zu Zeit asynchron vom Arbeitsspeicher auf die Festplatte übertragen wird und im RDB-Dump-Format geschrieben wird.

Seit Version 1.1 ist AOF die sichere Alternative, eine Nur-Anhänge-Datei (ein Journal), die als Operation geschrieben wird und die Datenmenge im Arbeitsspeicher ändern. Redis kann die Nur-Anhänge-Datei im Hintergrund neu schreiben, um ein unbegrenztes Wachstum des Journals zu vermeiden.

Standardmäßig schreibt es mindestens alle zwei Sekunden Daten in ein Dateisystem. Bei Bedarf stehen mehr oder weniger robuste Optionen zur Verfügung. Bei einem kompletten Systemausfall mit den Standardeinstellungen würden nur wenige Sekunden an Daten verloren gehen.

Replikation

Redis unterstützt die Replikation von Masterreplikaten. Daten von einem beliebigen Redis-Server können auf beliebig viele Replikate repliziert werden. Ein Replikat kann ein Master für ein anderes Replikat sein. Auf diese Weise kann es eine Single-Root-Replikationsstruktur implementieren. Die Replikate können so konfiguriert werden, dass Schreibvorgänge akzeptiert werden, wodurch eine absichtliche und unbeabsichtigte Inkonsistenz zwischen Instanzen ermöglicht wird.

Die Publish/Subscribe-Funktion ist vollständig implementiert, sodass ein Client eines Replikats einen Kanal abonnieren und einen vollständigen Feed von Nachrichten erhalten kann, die an einem Master an einer beliebigen Stelle in der Replikationsstruktur veröffentlicht werden. Die Replikation ist nützlich für die Skalierbarkeit (aber nicht für das Schreiben) oder für die Datenredundanz.

Leistung

Wenn die Haltbarkeit von Daten nicht erforderlich ist, ermöglicht Redis im Speicher eine gute Leistung im Vergleich zu Datenbanksystemen, die jede Änderung auf die Festplatte schreiben, bevor eine Transaktion als festgeschrieben betrachtet wird. Es arbeitet als Einzelprozess und ist ein Single-Threaded oder Double-Threaded, wenn es die AOF (Nur-Anhänge-Datei) neu schreibt. Daher kann eine einzelne Redis-Instanz keine parallele Ausführung von Aufgaben wie gespeicherten Prozeduren verwenden.

Clustering

Redis führte Clustering im April 2015 mit der Version 3.0 ein. Die Clusterspezifikation implementiert eine Teilmenge von Befehlen: Alle Einzeltastenbefehle sind verfügbar, Mehrtastenoperationen (Befehle, die sich auf Vereinigungen und Schnittpunkte beziehen) sind auf Schlüssel beschränkt, die zu demselben Knoten gehören und Befehle, die sich auf Datenbank-Auswahl-Operationen beziehen, sind nicht verfügbar.

Ein Redis-Cluster kann bis zu 1.000 Knoten skalieren, eine “akzeptable” Schreibsicherheit erreichen und den Betrieb fortsetzen, wenn einige Knoten ausfallen.

Anwendungsfälle

Aufgrund der Art des Datenbankentwurfs sind typische Anwendungsfälle unter anderem Sitzungs-Caching, Full Page Cache, Message Queue-Anwendungen, Leaderboards und das Zählen. Große Unternehmen wie Twitter nutzen Redis, Amazon Web Services bietet es in seinem Portfolio an und Microsoft bietet den Cache in Azure an.

Popularität

Laut monatlichen Rankings von DB-Engines wird Redis häufig als die beliebteste Schlüsselwertdatenbank eingestuft. Es wurde auf Platz 4 der NoSQL-Datenbank in Bezug auf Benutzerzufriedenheit und Marktpräsenz basierend auf Bewertungen der Benutzer, der beliebtesten NoSQL-Datenbank in Containern und der #1 NoSQL-Datenbank von 2015 nach Ranglisten-Webseite stackshare.io eingestuft. Sie wurde im Jahr 2017 und 2018 zur beliebtesten Datenbank in der Stack Overflow Developer Survey gewählt.

Sie haben noch Fragen?

Kontaktieren Sie uns

Kostenloser SEO-Check der OSG