Redis XTRIM

Redis Xtrim



Low-Level-Details von Redis-Streams

Redis-Streams sind eine Nur-Anhänge-Datenstruktur, die eine Reihe hocheffizienter Lese- und Einfügevorgänge mit einem speichereffizienten Speichermechanismus bereitstellt. Intern verwenden die Redis-Streams eine Radix-Baum-Datenstruktur, die ein platzoptimierter Baum mit hoher Speichereffizienz ist.

Redis-Streams speichern Daten als Liste von Einträgen, wobei jeder Eintrag aus Schlüssel-Wert-Paaren besteht. Auf einer niedrigen Ebene werden diese Einträge in Makroknoten gepackt, wie im Folgenden gezeigt wird.









In diesem Artikel konzentrieren wir uns auf das Entfernen von Stream-Einträgen mit dem XTRIM-Befehl, und das oben erwähnte Konzept wirkt sich stark auf die Effizienz des Entfernungsvorgangs aus. Normalerweise ist das Entfernen von Redis-Stream-Einträgen sehr effizient, wenn es auf Makroknotenebene, aber nicht auf Eintragsebene erfolgt. Dieser Mechanismus wird mit dem XTRIM-Befehl implementiert, den wir im folgenden Abschnitt besprechen werden.



Der XTRIM-Befehl

Der XTRIM-Befehl wird verwendet, um die Einträge eines Streams basierend auf einem gegebenen Schwellenwert abzuschneiden. Der Schwellenwert kann eine maximale Anzahl von Einträgen pro Stream oder eine ältere Eintrags-ID sein. Der XTRIM-Befehl akzeptiert den Schwellenwerttyp als Befehlsargument. Die Syntax des XTRIM-Befehls lautet wie folgt.





XTRIM stream_key MAXLEN | MINID [ = | ~ ] Schwellwert [ BEGRENZUNG der Anzahl ]

stream_key : Der Schlüssel des Redis-Streams.

MAXLEN : Die maximale Länge des Streams nach dem Trimmen von Einträgen. Alle Einträge werden entfernt, die die durch den Schwellwert festgelegte Länge des Streams überschreiten. Dieses Argument ist eine positive Ganzzahl.

MINID : Die minimale Stream-ID, die nach dem Trimmen der Einträge verbleiben sollte. Alle Einträge mit IDs unter dem angegebenen Schwellenwert werden entfernt. Immer wenn Sie diesen Parameter angeben, wird der Schwellenwert zu einer Stream-ID.

= Betreiber : Wenn angegeben, wird basierend auf dem Schwellenwert ein exaktes Trimmen durchgeführt.

~ Betreiber : Wenn angegeben, wird basierend auf dem Schwellenwert und der Makroknotengröße ein nahezu exaktes Trimmen durchgeführt.

Schwellwert : Der Schwellenwert basierend auf dem Argument MAXLEN oder MINID.

BEGRENZUNG der Anzahl : Die maximale Anzahl der zu entfernenden Einträge.

Anwendungsfall 01 – Entfernen von Stream-Einträgen basierend auf der maximalen Länge

Nehmen wir an, ein Tourismusunternehmen unterhält einen Redis-Shop, um touristische Informationen zu verfolgen. Die Datenstruktur von Redis-Streams wurde verwendet, um die Informationen jedes Touristen als Schlüssel-Wert-Paare zu speichern. Mit der Zeit ist der Stream gewachsen und sie planen, nur die letzten 1000 Einträge zu behalten. Sie haben also festgestellt, dass die maximale Länge des Streams jederzeit 1000 betragen sollte. Um dies zu erreichen, wurde der XTRIM-Befehl verwendet.

Zu Demonstrationszwecken erstellen wir zunächst einen Stream mit 10 Einträgen wie folgt. Der XADD-Befehl wurde verwendet, um die Einfügung durchzuführen.

xTouristeninfo hinzufügen * name jack land italien familienmems 5
xTouristeninfo hinzufügen * name harry country usa familienerinnerungen zwei
xTouristeninfo hinzufügen * name nikomita land japan familienmems 3
xTouristeninfo hinzufügen * name zakaria land indien familienmems zwei
xTouristeninfo hinzufügen * name redmond land brasilien familienmems 6
xTouristeninfo hinzufügen * name gefunden land japan familienmems 3
xTouristeninfo hinzufügen * name maryjohn land usa familienmems zwei
xTouristeninfo hinzufügen * name liza land italien familienmems 5
xTouristeninfo hinzufügen * name nimshikaa land japan familiemems 3
xTouristeninfo hinzufügen * name nisha land italien familienmems 5

Lassen Sie uns den XRANGE-Befehl verwenden, um den Stream touristinfo wie folgt zu untersuchen.

xrange touristinfo - +

Ausgabe:

Wie erwartet wurden die 10 Stream-Einträge von diesem Befehl angezeigt.

Zu Demonstrationszwecken kürzen wir den Stream dort, wo seine maximale Länge 5 wäre.

xtrim touristinfo maxlen 5

Lassen Sie uns die Stream-Einträge noch einmal mit dem XRANGE-Befehl untersuchen.

Wie erwartet wurden fünf Einträge aus dem Stream entfernt, und seine Länge beträgt 5.

Anwendungsfall 02 – Entfernen von Stream-Einträgen basierend auf Stream-IDs

Nehmen wir ein Beispiel, bei dem ein Wetterdienst Wetterinformationen eines bestimmten Standorts mithilfe von Redis-Streams verfolgt. Nun wollen sie ältere Einträge löschen, die nicht mehr benötigt werden. Wir können den XTRIM-Befehl mit der MINID-Strategie verwenden, wie im Folgenden gezeigt.

Zuerst erstellen wir einen Stream namens weatherinfo und fügen ihm wie folgt 5 Einträge hinzu.

xWetterinfo hinzufügen * Temp 10 Feuchtigkeit fünfzig
xWetterinfo hinzufügen * Temp zwanzig Feuchtigkeit 70
xWetterinfo hinzufügen * Temp 12 Feuchtigkeit 65
xWetterinfo hinzufügen * Temp fünfzehn Feuchtigkeit 88
xWetterinfo hinzufügen * Temp 18 Feuchtigkeit Vier fünf

Ausgabe:

Lassen Sie uns den XTRIM-Befehl verwenden, um die Einträge zu entfernen, deren IDs niedriger als der angegebene Schwellenwert sind.

xtrim Wetterinfo MINID 1660485503248 - 0

Die angegebene Mindest-ID ist dem dritten Eintrag zugeordnet. Daher werden die Einträge nach dem dritten Eintrag mit niedrigeren IDs gelöscht.

Ausgabe:

Da wir die Argumente = oder ~ nicht explizit angegeben haben, verwendet der Befehl standardmäßig den Operator =. Daher wurde das genaue Trimmen in beiden Anwendungsfällen durchgeführt. Wenn Sie den ~-Operator explizit angegeben haben, erfolgt ein nahezu exaktes Trimmen, wie im Folgenden gezeigt.

Wie in der obigen Abbildung gezeigt, wurde der XTRIM-Befehl mit dem ~-Operator verwendet. Wir bitten den Befehl, alle Einträge zu entfernen, die die Länge von 100 überschreiten. Da wir den XTRIM-Befehl nicht dazu zwingen, ein exaktes Trimmen durchzuführen, konzentriert er sich auf die Effizienz des Trimmens. Daher werden die unmittelbaren Einträge, die zu demselben Makroknoten gehören, nicht entfernt. Es behält die nächsten drei Einträge, die sich im selben Makroknoten befinden, und entfernt alle Makroknoten danach. Es führt zu einer erheblichen Leistungssteigerung als beim exakten Trimmansatz, wodurch der Befehlshaber gezwungen ist, zusätzliche Anstrengungen zu unternehmen. Dasselbe Verfahren findet statt, wenn der Schwellenwert auf den Eintrags-IDs basiert.

Das LIMIT-Argument begrenzt die Anzahl der entfernten Einträge aus dem angegebenen Stream, was verwendet werden kann, um etwas mehr Leistungsverbesserung zu erzielen.

Fazit

Kurz gesagt, der XTRIM-Befehl wird verwendet, um Stromeinträge basierend auf einem Schwellenwert zu entfernen. Der Typ des Schwellenwerts kann mit dem Kontext geändert werden, der unter Verwendung der Befehlsargumente MAXLEN und MINID angegeben wird. Wie diskutiert, kann das Trimmen auf zwei Arten durchgeführt werden, wobei die Trimmoperation den Schwellwert als eine exakte oder ungefähre Grenze betrachtet. Standardmäßig verwendet der Befehl den =-Operator, der für exaktes Trimmen verwendet wird. Mit dem ~-Operator können Sie eine ungefähre Trimmung vornehmen, wie im obigen Abschnitt erwähnt. Insgesamt helfen Ihnen der ungefähre Trimmansatz und das LIMIT-Argument, mit dem XTRIM-Befehl einen erheblichen Leistungsgewinn zu erzielen.