Die Daten im Stream sind unveränderlich. Die neuen Daten können nur am Ende des Streams angehängt werden. Redis -Streams können Einträge halten, die nicht nur Zeichenfolgen sind. Jeder Eintrag kann ein oder mehrere Feldwertpaare wie in Redis-Hashes enthalten. Diese Einträge haben eine eindeutige ID, um sie innerhalb des Streams zu identifizieren, ähnlich wie bei den in einer Protokolldatei verwendeten Byte -Offsets. Die folgende Abbildung bietet ein besseres Verständnis dafür, wie der Redis -Stream aussieht:
Mit dem Befehl XADD werden Einträge zu einem bestimmten Stream hinzugefügt, der unkompliziert ist. Der Datenzugriffsmechanismus unterscheidet sich bei Stromtypen im Vergleich zu anderen Typen. Der Hauptvorteil von Streams besteht darin, dass sie die neu angehängten Nachrichten an mehrere Kunden oder Verbraucher weitergeben können. Es ist nur eine Möglichkeit, Redis -Streams zu betrachten. Darüber hinaus können wir es als Zeitreihenspeicher sehen, in dem Sie den gesamten Strom itererieren können, um alle Einträge für einen bestimmten Zeitrahmen zu holen.
Redis -Stream -Verbrauchergruppen
Wie bereits erwähnt, ermöglichen Redis -Streams mehreren Verbrauchern, Daten daraus zu lesen. Darüber hinaus erweitert sie diese Funktionalität auf eine Ebene des Zugriffs auf eine Untergruppe der Stream -Nachrichten durch verschiedene Verbraucher. Jeder Verbraucher fängt verschiedene Daten auf, um zu verarbeiten, während Kafka das gleiche Verhalten mit Verbrauchergruppen implementiert. Die Technik der Verbrauchergruppen ist in Redis -Streams verfügbar, die es ermöglichen, die angegebenen Streamdaten an mehrere Verbraucher zu verteilen.
Wir können den Befehl xReadGroup verwenden, um Daten über eine Verbrauchergruppe zu lesen. Jede Verbrauchergruppe kann mehrere Verbraucher enthalten, die anhand eines eindeutigen Namens identifiziert werden.
Der Xack -Befehl
Wie bereits erwähnt, erhalten die Verbraucher innerhalb einer Verbrauchergruppe Nachrichten aus dem Stream, in dem die Nachrichten -IDs größer sind als die zuletzt gelieferte ID. Nach der Übergabe einer Nachricht an einen Verbraucher wird sein Status auf ausstehende und in der ausstehenden Einträge einer Verbrauchergruppe (PEL) gespeichert und gespeichert. Es ist ein Nebeneffekt, entweder die Xreadgroup- oder Xclaim -Befehle aufzurufen. Dies würde immer noch dazu führen, dass der Server die ausstehenden Nachrichten zurückgibt, wenn Sie einen Anruf mit dem Befehl xReadgroup tätigen, um den Nachrichtenverlauf pro Verbraucher abzurufen. Daher führten Redis -Verbrauchergruppen einen Prozess zur Anerkennung von Nachrichten ein. Der Xack -Befehl kann den Server darüber informieren, dass eine abgerufene Nachricht erfolgreich verarbeitet wurde. Es würde den Eintrag für eine solche Nachricht im PEL entfernen.
Syntax
XackDer Xack -Befehl gibt die Anzahl der bestätigten Einträge als Antwort zurück.
Beispiel: Lade Balancer bedient verschiedene Clients von mehreren Serverknoten
Schauen wir uns ein reales Szenario an, in dem ein Load Balancer aus einem Strom von Client-IP-Adressen liest und jedem Client aus verschiedenen Serverknoten dient. Wir können uns dies als eine Verbrauchergruppe vorstellen, die von einem Redis -Stream liest, in dem die Gruppe mehrere Verbraucherknoten enthält.
Zunächst sollten wir eine Verbrauchergruppe erstellen, zu der jeder Serverknoten gehört. Wir können den folgenden Xgroup -Befehl verwenden, um eine Verbrauchergruppe für einen bestimmten Stream zu erstellen:
Xgroup erstellen ipaddressstream ukservergroup $ mkstreamDer Befehl ist selbsterklärend, wo die iPaddressstream Hat eine neue Verbrauchergruppe namens UKSERVERGROUP Dies liefert nur die neuesten Nachrichten, die dem Stream zur Verfügung stehen, wenn ein Verbraucher verbunden ist. Es schafft auch das iPaddressstream Stream, weil die Mkstream Der Parameter wurde angegeben.
Dann sollten wir dem mehrere IP -Adressen zum Hinzufügen iPaddressstream zuvor erstellt mit dem folgenden Befehl redis xadd:
Xadd ipaddressstream * IP 123.456.12.1Ausgabe nach jedem Befehl:
Dies würde dem 5 Einträge zum Hinzufügen von Einträgen hinzufügen iPaddressstream Strom. Jeder Eintrag ist einer seriengenerierten eindeutigen ID zugewiesen, die nach dem Aufrufen des Befehls XADD zurückgegeben wurde.
Lassen Sie uns nun das lesen iPaddressstream über die UKSERVERGROUP Verbraucher angerufen Server0.
XreadGroup Group UkServerGroup Server0 Count 2 Streams iPaddressStream>Ausgang
Wie erwartet die Server0 Der Verbraucher erhält zwei neue Nachrichten von der iPaddressstream Strom. Diese beiden IP -Adressen wurden in die ausstehende Einträgeliste hinzugefügt. Wenn wir den Befehl XreadGroup mit der 0 -ID anrufen, wird die ausstehenden Nachrichten für die zurückgegeben Server0 Verbraucher.
XreadGroup Group UKServerGroup Server0 Streams iPaddressStream 0Ausgang
Dies bedeutet, dass der Server immer noch auf die wartet Server0 Verbraucher bestätigen diese beiden Nachrichten. Beachten wir die Nachrichten für die Server0 Verbraucher verwendet den folgenden Xack -Befehl.
Xack iPaddressStream Ukservergroup 1656192378464-0 1656192389344-0Hier erkennen wir beide Einträge an, die von den jeweiligen IDs identifiziert wurden. Der Befehl gibt auch die Anzahl der erfolgreich verarbeiteten Nachrichten zurück. Es ist zwei in diesem Fall.
Ausgang
Nach dem vorherigen Vorgang sollten diese beiden Nachrichten aus der ausstehenden Einträge (PEL) entfernt werden müssen. Daher die Server0 Der Verbraucher gibt keine anstehenden Nachrichten zurück, wenn sie den Befehl xReadgroup über die Verbrauchergruppe aufgerufen haben UKSERVERGROUP.
XreadGroup Group UKServerGroup Server0 Streams iPaddressStream 0Ausgang
Es gibt ein leeres Array zurück. Die Funktion zur Bestätigung der Nachrichten ist in solchen Szenarien sehr nützlich.
Abschluss
Redis wird mit dem Stream -Datentyp geliefert, dessen zugrunde liegende Implementierung auf der Protokolldatenstruktur basiert. Daher werden die neuen Einträge am Ende des Streams angehängt. Der größte Vorteil ist, dass mehrere Verbraucher die neuesten Nachrichten zum Stream abfragen können. Darüber hinaus ermöglicht die Redis Consumer Group -Technik den Lesestrom einer Gruppe von Verbrauchern, bei denen jeder Verbraucher nur eine Teilmenge der Stream -Nachrichten sieht. Beim Lesen des Eintrags eines Verbrauchers aus dem Stream wird ein solcher Eintrag in die ausstehende Einträgeliste hinzugefügt. Daher muss der Verbraucher jede der ausstehenden Nachrichten anerkennen. Es wird den Server benachrichtigt, um den Eintrag von PEL zu entfernen und den Speicher freizulassen. Der Xack -Befehl kann verwendet werden, um Redis -Stream -Nachrichten zu bestätigen. Es unterstützt die Anerkennung mehrerer Nachrichten gleichzeitig.