Datenstreaming mit Redis
In der heutigen Welt werden Daten kontinuierlich aus Social-Media-Plattformen, Websites und IoT-Geräten generiert. Daher ist das Streaming von Daten nicht mehr aufzuhalten. Ein Stream kann als eine Reihe von Ereignissen identifiziert werden, die aus mehreren gleichzeitigen Quellen generiert werden. Zum Beispiel generiert eine Wetterstation Wetterdaten an einem bestimmten Ort stündlich. Jedes Ereignis besteht aus Wetterdaten wie Temperatur, Luftfeuchtigkeit, Windgeschwindigkeit und Richtung.
Redis -Streams helfen dabei, diese große Menge an gestreamten Daten zu erfassen, zu verwalten und zu verstehen.
Normalerweise werden die Quellen, die Daten generieren oder in einen Stream schreiben. Jeder Produzent fügt einen neuen Eintrag in den Redis-Stream mit einer eindeutigen Ereignis-ID hinzu, bei der ein Ereignis aus einem oder mehreren Feldwertpaaren besteht, die einem Redis-Hash ähnlich sind. Am anderen Ende lesen die Verbraucher aus dem Stream, um einige sinnvolle Erkenntnisse zu generieren. Die Produzenten und Verbraucher müssen die Implementierungsdetails des anderen nicht kennen und Redis -Streams robuster machen.
Redis -Stream -Einträge und Makroknoten
Der Redis-Stream-Typ basiert auf weit verbreiteten Radix-Tree-Datenstrukturen. Normalerweise besteht ein Radix-Baum aus mehreren Makroknoten, bei denen ein Makroknoten mehrere Stream-Einträge speichern kann. Da der Radixbaum ein Speicher-optimiertes Präfixbaum ist, können Redis-Streams mit geringem Speicherverbrauch verwendet werden. Darüber hinaus ermöglichen die zugrunde liegenden Radix -Bäume Streams, um Daten zufällig oder innerhalb eines bestimmten Bereichs mit höherer Effizienz zuzugreifen.
Der Befehl xadd fügt einem Makroknoten im Stream einen neuen Eintrag hinzu. Wenn Sie einen Eintrag hinzufügen, ist er unveränderlich. Daher wird es als nur Append-Datenstruktur bezeichnet.
Der Befehl xdel
In einigen Fällen lohnt sich die Aufrechterhaltung von Millionen von historischen Stream -Daten aufgrund von Datenabfällen möglicherweise nicht. Daher unterstützen Redis -Streams die Löschung von Einträgen aus der Datenstruktur und freilegen Sie einige Speicher. Wir können den Befehl xdel verwenden, um einen Eintrag aus einem bestimmten Stream zu löschen.
Syntax:
Xdel[Eintrag_id…]
Der Befehl xdel akzeptiert mehrere Einträge_IDs. Daher können Sie mehrere Einträge pro Befehl löschen. Dieser Befehl gibt die Anzahl der gelöschten Stream -Einträge zurück. Wenn die gegebene Eintragung in einem Stream nicht vorhanden ist, ist die zurückgegebene Anzahl geringer als die angegebene ID -Anzahl.
Redis -Stream -Eingangslöschungsmechanismus
Der Befehl xdel lässt die Einträge des Streams nicht sofort abgelegt. Stattdessen markiert es den zuerst gelöschten Eintrag. Daher wird der Stream -Eintrag den zugewiesenen Speicher weiter verwendet. Der Speicher wird freigegeben, wenn alle Einträge eines Makroknotens gelöscht wurden. Es würde den Redis -Server dazu zwingen, den Speicher für diesen Makroknoten zu veröffentlichen.
Beispiel 1: Löschen Sie alte Wetterdateneingabe aus einem Stream
Erstellen wir zunächst einen Stream, um Wetterdaten in San-Francisco City mit dem XADD-Befehl zu speichern. Angenommen, die Sensoren produzieren täglich mittags Daten. Daher werden wir in diesem Beispiel drei Tage lang Daten hinzufügen.
Xadd sanfranciscoweather * temp 18.4 Wind 12 Feuchtigkeit 67
Xadd sanfranciscoweather * temp 12.6 Wind 5 Luftfeuchtigkeit 34
Xadd sanfranciscoweather * temp 5 Wind 1 Luftfeuchtigkeit 23
Nehmen wir an, der erste Eintrag stammt aus dem letzten Monat und wir müssen die Daten des Vormonats nicht im Auge behalten.
Daher können wir den Befehl xdel verwenden, um den ersten Eintrag mit der ID 1656493771190-0 zu löschen.
XDEL SANFRANCISCOWEATHER 1656493771190-0
Der Befehl xdel hat die Ganzzahl zurückgegeben 1, Dies bedeutet, dass nur ein Eintrag aus dem Strom gelöscht wurde.
Verwenden wir den Befehl XRange, um den Stream zu lesen und zu überprüfen.
Xrange Sanfranciscoweather - +
Wie erwartet sind nur die letzten beiden Einträge verfügbar, und der erste Eintrag wurde gelöscht.
Beispiel 2: Mehrere Wettereinträge aus einem Stream löschen
Nehmen wir an, wir müssen mehrere Einträge gleichzeitig aus einem Stream löschen. Der Befehl xdel unterstützt es. Sie können die Eintrags -IDs wie im Folgenden angeben.
Wir werden die verbleibenden zwei Einträge aus dem SanFranciscoweather -Stream löschen, den wir im vorherigen Beispiel erstellt haben. Die 1656493789125-0 und 1656493802770-0 sind die IDs der verbleibenden zwei Einträge.
Xdel Sanfranciscoweather 1656493789125-0 1656493802770-0
Wie erwartet ist der Befehlsrenditewert 2, Dies zeigt an, dass zwei Einträge gelöscht wurden.
Lassen Sie uns den Stream lesen
Der SanFrancisweather -Stream ist leer.
Abschluss
Redis -Streams können als eine Reihe von Ereignissen identifiziert werden, die durch gleichzeitige Quellen produziert werden. Ein Stream kann mehrere Einträge enthalten, bei denen jeder Eintrag eine eindeutige ID hat und aus Feldwertpaaren besteht. Redis-Streams basieren auf der Radix-Baumdatenstruktur, wodurch sie hocheffizient und speicheroptimiert sind. Die zu einem Stream hinzugefügten Einträge können mit dem Befehl Redis XDEL gelöscht werden. Dieser Befehl markiert den Eintrag, der gelöscht wird, anstatt den Eintrag abzuwerfen und Speicher zu veröffentlichen. Es wird das Speicher zurückgewiesen, wenn alle Einträge eines Makroknotens als gelöscht gekennzeichnet sind.