Redis 6: Eine Hochgeschwindigkeitsdatenbank, ein Cache und ein Nachrichtenbroker

Wie viele andere könnte man sich Redis nur als Cache vorstellen. Dieser Standpunkt ist veraltet.

Im Wesentlichen ist Redis ein speicherinterner NoSQL-Datenstrukturspeicher, der auf der Festplatte bestehen bleiben kann. Es kann als Datenbank, Cache und Nachrichtenbroker fungieren. Redis verfügt über integrierte Replikation, Lua-Skripte, LRU-Räumung, Transaktionen und verschiedene Ebenen der Persistenz auf der Festplatte. Es bietet hohe Verfügbarkeit über Redis Sentinel und automatische Partitionierung mit Redis Cluster.

Das zentrale Redis-Datenmodell ist ein Schlüsselwert, es werden jedoch viele verschiedene Arten von Werten unterstützt: Zeichenfolgen, Listen, Sätze, sortierte Sätze, Hashes, Streams, HyperLogLogs und Bitmaps. Redis unterstützt auch Geodatenindizes mit Radiusabfragen und Streams.

[Auch auf: Wie Redis kratzte und juckte - und Datenbanken für immer veränderte]

Für Open Source Redis bietet Redis Enterprise Funktionen für zusätzliche Geschwindigkeit, Zuverlässigkeit und Flexibilität sowie eine Cloud-Datenbank als Service. Redis Enterprise lässt sich linear auf Hunderte Millionen Vorgänge pro Sekunde skalieren, verfügt über eine aktiv-aktive globale Verteilung mit lokaler Latenz, bietet Redis on Flash zur Unterstützung großer Datenmengen zu den Infrastrukturkosten einer festplattenbasierten Datenbank und bietet eine Verfügbarkeit von 99,999% basierend auf der Erstellung -in Haltbarkeit und einstelliges Sekunden-Failover.

Darüber hinaus erweitert Redis Enterprise die Kernfunktionalität von Redis, um alle Datenmodellierungsmethoden mit Modulen wie RediSearch, RedisGraph, RedisJSON, RedisTimeSeries und RedisAI zu unterstützen, und ermöglicht die Ausführung von Vorgängen über und zwischen Modulen und Kern. All dies wird bereitgestellt, während die Datenbanklatenz unter einer Millisekunde gehalten wird.

Kernfunktionen und Anwendungsfälle von Redis

Was bedeutet es, dass Redis jetzt als Datenbank-, Cache- und Nachrichtenbroker fungieren kann? Und welche Anwendungsfälle unterstützen diese Rollen?

Cache ist die klassische Funktion von Redis. Im Wesentlichen sitzt Redis vor einer festplattenbasierten Datenbank und speichert Abfragen und Ergebnisse. Die Anwendung überprüft zuerst den Redis-Cache auf gespeicherte Ergebnisse und fragt die festplattenbasierte Datenbank nach Ergebnissen ab, die sich derzeit nicht im Cache befinden. Angesichts der Antwortrate von Redis im Sub-Millisekunden-Bereich ist dies normalerweise ein großer Gewinn für die Anwendungsleistung. Ablaufzeitgeber und das Entfernen der LRU (zuletzt verwendet) aus dem Redis-Cache helfen dabei, den Cache auf dem neuesten Stand zu halten und den Speicher effektiv zu nutzen.

Der Session Store ist ein wichtiger Bestandteil moderner Webanwendungen. Hier können Sie bequem Informationen über den Benutzer und seine Interaktionen mit der Anwendung aufbewahren. In einer Webfarmarchitektur erfordert das Hosten des Sitzungsspeichers direkt auf dem Webserver, dass der Benutzer für zukünftige Anforderungen auf demselben Back-End-Server bleibt, was den Load Balancer einschränken kann. Durch die Verwendung einer festplattenbasierten Datenbank für den Sitzungsspeicher entfällt die Notwendigkeit, eine Sitzung an einen einzelnen Webserver zu binden, es wird jedoch eine zusätzliche Latenzquelle eingeführt. Die Verwendung von Redis (oder einer anderen schnellen In-Memory-Datenbank) als Sitzungsspeicher führt häufig zu einer Webanwendungsarchitektur mit geringer Latenz und hohem Durchsatz.

Redis kann als Funktion Message Broker drei verschiedene Mechanismen verwenden, und eine der wichtigsten Anwendungsfälle für redis als Message - Broker zwischen Microservice als Klebstoff zu fungieren. Redis verfügt über einen Publikations- / Abonnement-Benachrichtigungsmechanismus mit geringem Overhead, der das Löschen und Vergessen von Nachrichten erleichtert, jedoch nicht funktioniert, wenn der Zieldienst nicht empfangsbereit ist. Für eine beständigere, Kafka-ähnliche Nachrichtenwarteschlange verwendet Redis Streams, bei denen es sich um nach Zeitstempeln geordnete Schlüssel-Wert-Paare in einem einzelnen Schlüssel handelt. Redis unterstützt auch doppelt verknüpfte Listen von Elementen, die auf einem einzigen Schlüssel gespeichert sind und als FIFO-Warteschlange (First-In / First-Out) nützlich sind. Microservices können Redis sowohl als Cache als auch als Nachrichtenbroker verwenden, obwohl der Cache in einer von der Nachrichtenwarteschlange getrennten Instanz von Redis ausgeführt werden sollte.

Durch die grundlegende Replikation kann Redis skaliert werden, ohne die Cluster-Technologie der Redis Enterprise-Version zu verwenden. Die Redis-Replikation verwendet ein Leader-Follower-Modell (auch Master-Slave genannt), das standardmäßig asynchron ist. Clients können die synchrone Replikation mit einem WAIT-Befehl erzwingen, aber selbst das macht Redis nicht über Replikate hinweg konsistent.

Redis verfügt über serverseitiges Lua-Scripting, mit dem Programmierer die Datenbank erweitern können, ohne C-Module oder clientseitigen Code schreiben zu müssen. Mit grundlegenden Redis-Transaktionen kann ein Client eine Folge von Befehlen als nicht unterbrechbare Einheit deklarieren, indem er die Befehle MULTI und EXEC verwendet, um die Folge zu definieren und auszuführen. Dies ist nicht dasselbe wie relationale Transaktionen mit Rollbacks.

Redis verfügt über verschiedene Persistenzstufen auf der Festplatte, die der Benutzer auswählen kann. Die Persistenz der RDB (Redis-Datenbankdatei) erstellt in bestimmten Intervallen Momentaufnahmen der Datenbank. Die AOF-Persistenz (Nur-Anhängen-Datei) protokolliert jeden vom Server empfangenen Schreibvorgang. Sie können sowohl die RDB- als auch die AOF-Persistenz für maximale Datensicherheit verwenden.

Redis Sentinel, selbst ein verteiltes System, bietet Redis eine hohe Verfügbarkeit. Es überwacht die Master- und Replikatinstanzen, benachrichtigt, wenn etwas nicht stimmt, und führt ein automatisches Failover durch, wenn der Master nicht mehr funktioniert. Es dient auch als Konfigurationsanbieter für Clients.

Redis Cluster bietet eine Möglichkeit, eine Redis-Installation auszuführen, bei der Daten automatisch auf mehrere Redis-Knoten verteilt werden. Redis Cluster bietet auch ein gewisses Maß an Verfügbarkeit während Partitionen, obwohl der Cluster nicht mehr funktioniert, wenn die Mehrheit der Master nicht mehr verfügbar ist.

Wie bereits erwähnt, ist Redis ein Schlüsselwertspeicher, der Zeichenfolgen, Listen, Sätze, sortierte Sätze, Hashes, Streams, HyperLogLogs und Bitmaps als Werte unterstützt. Einer der einfachsten und häufigsten Anwendungsfälle ist die Verwendung ganzzahliger Werte als Zähler. Zur Unterstützung dessen sind INCR (Inkrement), DECR (Dekrement) und andere einzelne Operationen atomar und daher in einer Umgebung mit mehreren Clients sicher. Wenn in Redis Schlüssel bearbeitet werden, werden sie automatisch erstellt, sofern sie noch nicht vorhanden sind.

> SET-Verbindungen 10

in Ordnung

> INCR-Verbindungen

(Ganzzahl) 11

> INCR-Verbindungen

(Ganzzahl) 12

> DEL-Verbindungen

(Ganzzahl) 1

> INCR-Verbindungen

(Ganzzahl) 1

> INCRBY-Verbindungen 100

(ganze Zahl) 101

> DECR-Verbindungen

(ganze Zahl) 100

> DECRBY-Verbindungen 10

(ganze Zahl) 90

Die anderen Arten von Wertestrukturen haben auch ihre eigenen Beispiele im Try Redis-Tutorial. Das Tutorial wurde gerade gewartet, als ich es selbst ausprobierte. Ich gehe davon aus, dass dies bald behoben wird, da Redis Labs sich an den ursprünglich gemeinschaftlichen Bemühungen beteiligt hat.

Es gibt eine Reihe von Zusatzmodulen für Redis, darunter (in absteigender Reihenfolge der Beliebtheit) ein neuronales Netzwerkmodul, eine Volltextsuche, SQL, einen JSON-Datentyp und eine Diagrammdatenbank. Die Lizenzen für Module werden von den Autoren festgelegt. Einige der Module, die mit Redis arbeiten, sind hauptsächlich Module für Redis Enterprise.

Redis Enterprise-Verbesserungen

Redis Enterprise verwendet eine Cluster-Architektur ohne gemeinsame Nutzung und bietet eine unendliche lineare Skalierung, ohne dass in einer verkleinerten Architektur nichtlineare Gemeinkosten anfallen. Sie können mehrere Redis-Instanzen auf einem einzelnen Clusterknoten bereitstellen, um die Multi-Core-Computerarchitektur voll auszunutzen. Redis Enterprise hat eine Skalierung auf Hunderte Millionen Vorgänge pro Sekunde mit einer Betriebszeit von fünf Neunen (99,999%) demonstriert. Redis Enterprise führt ein automatisches Re-Sharding und Re-Balancing durch, während eine geringe Latenz und ein hoher Durchsatz für Transaktionslasten beibehalten werden.

Redis Enterprise bietet eine Aktiv-Aktiv-Bereitstellung für global verteilte Datenbanken und ermöglicht gleichzeitige Lese- und Schreibvorgänge für dasselbe Dataset an mehreren Standorten. Um dies effizienter zu gestalten, kann Redis Enterprise konfliktfreie replizierte Datentypen (CRDTs) verwenden, um die Konsistenz und Verfügbarkeit von Daten zu gewährleisten. Riak und Azure Cosmos DB sind zwei weitere NoSQL-Datenbanken, die CRDTs unterstützen.

Obwohl es umfangreiche akademische Literatur zu CRDTs gibt, gebe ich zu, dass ich nicht ganz verstehe, wie oder warum sie funktionieren. Die kurze Zusammenfassung , was sie tun , ist , dass CRDTs Inkonsistenzen ohne Eingriff lösen kann, einen mathematisch abgeleitete Satz von Regeln. CRDTs sind nützlich für Daten mit hohem Datenvolumen, für die ein gemeinsamer Status erforderlich ist, und können geografisch verteilte Server verwenden, um die Latenz für Benutzer zu verringern.

Einer der Hauptunterschiede zwischen Redis und Redis Enterprise besteht darin, dass Redis Enterprise den Datenpfad von der Clusterverwaltung entkoppelt. Dies verbessert den Betrieb beider Komponenten. Der Datenpfad basiert auf mehreren Multithread-Proxys ohne Latenz, die sich auf jedem der Clusterknoten befinden, um die zugrunde liegende Komplexität des Systems zu maskieren. Der Cluster-Manager ist eine Steuerungsfunktion, die Funktionen wie Resharding, Neuausgleich, Auto-Failover, Rack-Erkennung, Datenbankbereitstellung, Ressourcenverwaltung, Konfiguration der Datenpersistenz sowie Sicherung und Wiederherstellung bietet. Da der Cluster-Manager vollständig von den Datenpfadkomponenten entkoppelt ist, wirken sich Änderungen an seinen Softwarekomponenten nicht auf die Datenpfadkomponenten aus.

Redis on Flash ist eine Redis Enterprise-Funktion, mit der die Hardwarekosten für Redis drastisch gesenkt werden können. Anstatt für Terabyte RAM über die Nase bezahlen zu müssen oder die Größe Ihrer Redis-Datasets einzuschränken, können Sie Redis on Flash verwenden, um häufig aufgerufene Hot Data im Speicher und kältere Werte in Flash oder im permanenten Speicher wie Intel Optane DC zu speichern.

Zu den Redis Enterprise-Modulen gehören RedisGraph, RedisJSON, RedisTimeSeries, RedisBloom, RediSearch und RedisGears. Alle Redis Enterprise-Module funktionieren auch mit Open Source Redis.

Was ist neu in Redis 6?

Redis 6 ist eine große Version, sowohl für die Open Source-Version als auch für die kommerzielle Version von Redis Enterprise. Die Leistungsnachrichten sind die Verwendung von Thread-E / A, wodurch Redis 6 eine zweifache Geschwindigkeitsverbesserung gegenüber Redis 5 (was kein Problem war) bietet. Dies überträgt sich auf Redis Enterprise, das wie oben beschrieben zusätzliche Geschwindigkeitsverbesserungen für Cluster bietet.

Durch das Hinzufügen von Zugriffssteuerungslisten (ACLs) erhält Redis 6 das Konzept der Benutzer und Entwickler können sichereren Code schreiben. Redis Enterprise 6 baut auf ACLs auf und bietet eine rollenbasierte Zugriffssteuerung (RBAC), die für Programmierer und Datenbankadministratoren bequemer ist.

Wichtige neue Funktionen in Redis 6

Redis 6.0 Open Source

  • Zugriffssteuerungslisten (ACLs)
  • Verbesserte Räumungen
  • Threaded I / O.
  • RESP3-Protokoll

Redis Enterprise 6.0

  • Rollenbasierte Zugriffskontrolle (RBAC)
  • Aktiv-Aktiv erweitern
  • HyperLogLog
  • Streams

Redis Enterprise 6.0 bietet Unterstützung für den Datentyp Streams in Aktiv-Aktiv-Datenbanken. Dies ermöglicht sowohl eine hohe Verfügbarkeit als auch eine geringe Latenz beim gleichzeitigen Lesen und Schreiben in und aus einem Echtzeit-Stream in mehreren Rechenzentren an mehreren geografischen Standorten.

RedisGears ist ein dynamisches Framework, mit dem Entwickler Funktionen schreiben und ausführen können, die Datenflüsse in Redis implementieren. Es ermöglicht Benutzern das Schreiben von Python-Skripten für die Ausführung in Redis und ermöglicht eine Reihe von Anwendungsfällen, darunter Write-Behind (Redis fungiert als Front-End für eine festplattenbasierte Datenbank), Echtzeit-Datenverarbeitung, Streaming und Ereignisverarbeitung sowie Vorgänge die Datenstrukturen und -modelle sowie AI-gesteuerte Transaktionen kreuzen.

RedisAI ist eine Modell-Serving-Engine, die in Redis ausgeführt wird. Es kann Inferenzen mit PyTorch-, TensorFlow- und ONNX-Modellen durchführen. RedisAI kann auf CPUs und GPUs ausgeführt werden und ermöglicht Anwendungsfälle wie Betrugserkennung, Anomalieerkennung und Personalisierung.

Redis installieren

Sie können Redis installieren, indem Sie einen Quell-Tarball herunterladen und kompilieren oder ein Docker-Image vom Docker Hub abrufen. Redis kann unter Linux, MacOS, OpenBSD, NetBSD und FreeBSD kompiliert und verwendet werden. Das Quellcode-Repository befindet sich auf GitHub. Unter Windows können Sie Redis entweder in einem Docker-Container oder unter Windows Subsystem for Linux (WSL) ausführen, für das Windows 10 erforderlich ist.

Sie können Redis Enterprise unter Linux oder in Docker-Containern installieren. Die Linux-Downloads werden in Form von Binärpaketen (DEB oder RPM, je nach Linux-Version) und Bash-Shell-Skripten für die Cluster-Installation bereitgestellt. Die Skripte prüfen die erforderlichen vier Kerne und 15 GB RAM für die Installation.

Redis Enterprise Cloud

Der schnellste Weg, Redis Enterprise zu installieren, besteht darin, es überhaupt nicht zu installieren, sondern es in der Redis Enterprise Cloud auszuführen. Als ich dies selbst zu Überprüfungszwecken versuchte, erhielt ich zunächst eine Redis 5-Instanz. Ich musste um ein Upgrade auf Redis 6 bitten.