Details von Redis-Streams auf niedriger Ebene
Redis-Streams sind eine Nur-Anhänge-Datenstruktur, die einen Satz hocheffizienter Lese- und Einfügen von Vorgängen mit einem speichereffizienten Speichermechanismus bietet. Innen verwenden die Redis-Streams eine Radix-Baum-Datenstruktur, die ein raumoptimierter Baum mit hoher Speichereffizienz ist.
Redis-Streams speichern Daten als Liste der Einträge, bei denen jeder Eintrag aus Schlüsselwertpaaren besteht. Auf einer niedrigen Ebene sind diese Einträge in Makro-Noten gepackt, wie im Folgenden gezeigt.
In diesem Artikel konzentrieren wir uns auf die Entfernung von Stream-Einträgen mithilfe des XTRIM-Befehls, und das oben genannte Konzept beeinflusst die Effizienz des Entfernungsvorgangs genau. Normalerweise ist die Entfernung des Redis-Stream-Eingangs sehr effizient, wenn es auf der Makroknotenebene ausgeführt wird, jedoch nicht auf Einstiegsebene. Dieser Mechanismus wird mit dem Xtrim -Befehl implementiert, den wir im folgenden Abschnitt diskutieren werden.
Der Xtrim -Befehl
Mit dem Befehl xtrim wird die Einträge eines Streams basierend auf einem bestimmten Schwellenwert abgeschnitten. Der Schwellenwert kann eine maximale Anzahl von Einträgen pro Stream oder eine ältere Eintrags -ID sein. Der Befehl xtrim akzeptiert die Art der Schwelle als Befehlsargument. Die Syntax des Xtrim -Befehls lautet wie folgt.
Xtrim stream_key maxlen | Minid [= | ~] threshold_value [Grenzzahl]
Stream_key: Der Schlüssel des Redis -Streams.
Maxlen: Die maximale Länge des Stroms nach Trimmeinträgen. Alle Einträge werden entfernt, die die Länge des Stroms überschreiten, der durch den Schwellenwert angegeben ist. Dieses Argument ist eine positive Ganzzahl.
Minid: Die minimale Stream -ID, die nach dem Trimmen der Einträge bleiben sollte. Alle Einträge werden entfernt, die IDs niedriger als die angegebene Schwelle haben. Wenn Sie diesen Parameter angeben, wird der Schwellenwert zu einer Stream -ID.
= Operator: Wenn angegeben, wird das genaue Trimmen basierend auf dem Schwellenwert durchgeführt.
~ Operator: Wenn angegeben, wird fast genaues Trimmen basierend auf dem Schwellenwert und der Makroknotengröße durchgeführt.
Schwellwert: Der Schwellenwert basiert auf dem Argument Maxlen oder Minid.
Grenze Grenze: Die maximale Anzahl von Einträgen zu beseitigen.
Anwendungsfall 01 - Entfernen von Streameinträgen basierend auf der maximalen Länge
Nehmen wir an, dass ein Tourismusunternehmen einen Redis -Laden unterhält, um die Touristeninformationen im Auge zu behalten. Die Datenstruktur der Redis-Streams wurde verwendet, um die Informationen jedes Touristen als Schlüsselwertpaare zu speichern. Mit der Zeit ist der Stream gewachsen und planen, nur die neuesten 1000 Einträge zu behalten. Sie haben also identifiziert, dass die maximale Länge des Stroms jederzeit 1000 betragen sollte. Der Xtrim -Befehl wurde verwendet, um dies zu erreichen.
Für Demonstrationszwecke werden wir zunächst einen Stream mit 10 Einträgen wie folgt erstellen. Der XADD -Befehl wurde verwendet, um die Einführung durchzuführen.
Xadd Touristinfo * Name Jack Country Italien FamilyMems 5
Xadd Touristinfo * Name Harry Country USA FamilyMems 2
Xadd Touristinfo * Name Nikomita Country Japan FamilyMems 3
Xadd Touristinfo * Name Zakaria Country India FamilyMems 2
Xadd Touristinfo * Name Redmond Country Brazil FamilyMems 6
Xadd Touristinfo * Name Nakita Country Japan FamilyMems 3
Xadd Touristinfo * Name Maryjohn Country USA FamilyMems 2
Xadd Touristinfo * Name Liza Country Italy FamilyMems 5
Xadd Touristinfo * Name Nimshikaa Country Japan FamilyMems 3
Xadd Touristinfo * Name Nisha Country Italien FamilyMems 5
Verwenden wir den XRange -Befehl, um den Stream TouristInfo wie folgt zu inspizieren.
Xrange Touristinfo - +
Ausgang:
Wie erwartet wurden die 10 Stream -Einträge von diesem Befehl angezeigt.
Zu Demonstrationszwecken werden wir den Strom abschneiden, wo seine maximale Länge 5 sein würde.
Xtrim Touristinfo Maxlen 5
Überprüfen wir die Stream -Einträge erneut mit dem XRange -Befehl.
Wie erwartet wurden fünf Einträge aus dem Strom vertrieben, und seine Länge beträgt 5.
Anwendungsfall 02 - Entfernen von Streameinträgen basierend auf Stream -IDs
Nehmen wir ein Beispiel, bei dem ein Wetterunternehmen die Wetterinformationen eines bestimmten Ortes mit Redis -Streams verfolgt. Jetzt wollen sie ältere Einträge löschen, die nicht mehr benötigt werden. Wir können den Befehl xtrim mit der Minid -Strategie verwenden, wie im Folgenden gezeigt.
Erstens werden wir einen Stream namens WeatherInfo erstellen und 5 Einträge wie folgt hinzufügen.
xadd weatherinfo * temp 10 feuchtigkeit 50
xadd weatherinfo * temp 20 feuchtigkeit 70
Xadd WeatherInfo * Temp 12 Feuchtigkeit 65
xadd weatherinfo * temp 15 feuchtigkeit 88
xadd weatherinfo * temp 18 feuchtigkeit 45
Ausgang:
Verwenden wir den Befehl xtrim, um die Einträge zu entfernen, die IDs niedriger als der angegebene Schwellenwert haben.
Xtrim WeatherInfo Minid 1660485503248-0
Die angegebene Mindest -ID ist mit dem dritten Eintrag verbunden. Daher werden die Einträge nach dem dritten Eintrag mit niedrigeren IDs gelöscht.
Ausgang:
Da wir die ausdrücklich ausdrücklichen Argumente = oder ~ nicht angegeben haben, verwendet der Befehl den = operator standardmäßig. Daher wurde der genaue Trimmen in beiden Anwendungsfällen durchgeführt. Wenn Sie den ~ Operator explizit angegeben haben, erfolgt nahezu genaues Trimmen, wie im Folgenden gezeigt.
Wie in der obigen Abbildung gezeigt, wurde der Befehl xtrim mit dem ~ operator verwendet. Wir bitten den Befehl, alle Einträge zu entfernen, die die Länge von 100 überschreiten. Da wir den Befehl Xtrim nicht dazu zwingen, genau zu trimmen, konzentriert sich dies auf die Effizienz des Trimmbetriebs. Daher werden die unmittelbaren Einträge, die zum gleichen Makroknoten gehören, nicht entfernt. Die nächsten drei Einträge, die sich im selben Makroknoten befinden. Es gibt eine beträchtliche Menge an Leistungsverbesserungen als im genauen Trimmansatz, was den Befehl zwingt, den zusätzlichen Aufwand zu unternehmen. Das gleiche Verfahren erfolgt, wenn der Schwellenwert auf den Eingangs -IDs basiert.
Das Grenzargument begrenzt die Anzahl der ausgegebenen Einträge aus dem angegebenen Stream, mit dem ein wenig mehr Leistungsverbesserung erzielt werden kann.
Abschluss
Kurz gesagt, der Befehl xtrim wird verwendet, um Stream -Einträge basierend auf einem Schwellenwert zu entfernen. Der Typ des Schwellenwerts kann mit dem Kontext geändert werden, der mit den Befehlsargumenten von Maxlen und Minid angegeben wird. Wie erläutert, kann das Trimmen auf zwei Arten erfolgen, wenn der Trimmbetrieb den Schwellenwert als genaue oder ungefähre Grenze betrachtet. Standardmäßig verwendet der Befehl den = Operator, der zum genauen Trimmen verwendet wird. Mit dem ~ Operator können Sie ein ungefähres Trimmen wie im obigen Abschnitt erwähnt durchführen. Insgesamt helfen Ihnen der ungefähre Trimmansatz und das Grenzargument, einen erheblichen Leistungsverstärkung mit dem XTRIM -Befehl zu erzielen.