Redis BRPOP

Redis BRPOP
Die Liste ist ein beliebter Redis -Datentyp, der eine Abfolge von Zeichenfolgen speichert, die auf der Einfügungsreihenfolge basieren. Eine Liste kann mehr als 4 Milliarden Elemente enthalten. Die einzigartige Tatsache über die Redisliste besteht darin. Normalerweise die Lpush Und Rpush Befehle werden verwendet, um die Elemente in eine Liste einzufügen. In der Zwischenzeit wird die brandneue Liste mit dem angegebenen Schlüssel erstellt. Alle Listenbefehle verhalten sich genauso, wenn eine neue Liste erstellt wird, wenn sie mit einem nicht existierenden Schlüssel übergeben wird.


Wenn alle Elemente aus der Liste gesteckt werden, wird der zugehörige Schlüssel aus dem Redis -Schlüsselraum gelöscht. Die Redisliste ist der ideale Kandidat für die Anwendungen mit niedriger Latenz, da die Einfügungs- und Löschvorgänge in der konstanten Zeitkomplexität aufweisen KOPF Und SCHWANZ. Es spielt keine Rolle, ob sich fünf oder tausend Elemente in der Liste befinden. Die Zeit für das Einfügen und die Löschung dauert eine konstante Zeit in der Nähe der linken und rechten Enden.

Es sind praktische Bedürfnisse, um die Elemente aus dem Schwanz oder Kopf einer bestimmten Liste zu entfernen. Der BRPOP Und Blpop Befehle werden aus der Redis Version 2 eingeführt.0.0 Um die genannte Anforderung zu erfüllen. Der BRPOP Der Befehl wird in diesem Leitfaden bewertet.

Der BRPOP -Befehl

Der BRPOP ist die fortgeschrittene Version der RPOP Befehl. Der RPOP Der Befehl steckt ein Element aus dem Schwanz der Liste, das in einem bestimmten Schlüssel gespeichert ist. Wie der Name schon sagt, ist der BRPOP -Befehl die blockierende Version des RPOP. Wenn der Schlüssel nicht existiert, wird der Befehl BRPOP nicht mit dem zurückkehren Null Wert sofort wie im Befehl rpop. Stattdessen wartet es, bis eine neue Liste in diesem Schlüssel erstellt wird. Bei der Erstellung einer neuen Liste in der genannten Schlüssel wird der Befehl BRPOP das Heckelement aufgebaut. Außerdem akzeptiert dieser Befehl die mehreren Schlüssel und steckt nur die Elemente aus der ersten nicht leeren Schlüssel.

Syntax:

Das Folgende ist die Syntax für den BRPOP -Befehl:

BRPOP LIST_KEY [LIST_KEY…] Timeout


List_key: Dies ist der Schlüssel der Liste.
Auszeit: Dies ist der Zeitüberschreitungswert in Sekunden, in dem der Client bis zu diesem Zeitübergang blockiert wird.

Normalerweise gibt der BRPOP -Befehl eine Arrayausgabe zurück:

Wenn eine nicht leere Liste angegeben ist, gibt der Befehl den gepackten Elementwert und den Schlüssel der enthaltenden Liste wie im folgenden Format zurück:

1) "Carlist"
2) "Benz"

Wenn kein einzelnes Element aus einer der angegebenen Listen ausgestattet werden soll und die Zeitüberschreitung abgelaufen ist, ist die Null Wert wird zurückgegeben.

(Null)
(10.46s)

Beispiel: Radiosender Playlist Manipulation mit BRPOP

Nehmen wir an, dass ein Radiosender Songs aus einer täglichen Wiedergabeliste abspielen muss. Die Wiedergabeliste enthält die Song -IDs zum Spielen. Die Songs sollten in der Insertionsordnung bestellt werden. Jedes Lied wird vom Ende der Wiedergabeliste bis zum Spielen ausgewählt.

Wir können die Datenstruktur für Redis -Listen verwenden, um die genannte Wiedergabeliste und die Listenvorgänge zu implementieren, um die Wiedergabelistenlieder zu manipulieren. Lassen Sie uns eine Wiedergabeliste namens erstellen Midnight Playlist und fügen Sie einige Song -IDs hinzu, wie im Folgenden gezeigt. Der Lpush dafür wird der Befehl verwendet:

LPush Midnightplaylist Song001 Song004 Song010 Song100 Song101


Dies würde eine Liste erstellen, wie im Folgenden gezeigt:

Kopf -> Song101 | Song100 | Song010 | Song004 | Song001 <- tail


Nicht blockierter Verhalten des BRPOP-Befehls

Jetzt ist es an der Zeit, eine Show zu starten. Wir sollten einige Songs vom Ende der Wiedergabeliste auswählen. Somit, Song001 sollte aus der Wiedergabeliste entfernt werden und muss vom Rekorder gespielt werden. Wir verwenden den BRPOP -Befehl, um die zu packen Song001 Aus der Wiedergabeliste und um die Song -ID dem Client -Listener zu bringen.

BRPOP Midnightplaylist 5


Das Timeout -Argument wird als fünf Sekunden angegeben. Seit der Midnight Playlist enthält Elemente, die BRPOP Befehl verhält sich auf nicht blockierende Weise. Daher taucht und gibt es das Schwanzelement an den Client zurück.

Blockierungsverhalten des BRPOP -Befehls

Die vorherigen Ergebnisse können auch durch den Befehl rpop erzielt werden. Schauen wir uns daher den wirklichen Vorteil des BRPOP -Befehls mit dem Blockierungsverhalten an. Lassen Sie uns alle Elemente aus dem entfernen Midnight Playlist Taste mit dem Befehl rpop.

RPOP Midnightplaylist 4


Dies entfernt alle verbleibenden Elemente aus der Liste und der Midnight Playlist Der Schlüssel wird ebenfalls aus dem Redis -Schlüsselraum gelöscht.

Lassen Sie uns den Befehl BRPOP mit 60 Sekunden Zeitüberschreitungen und den nicht existierenden Schlüssel ausführen Midnight Playlist. Jetzt verhält sich der Befehl auf blockierende Weise. Es wartet darauf, dass der Schlüssel erstellt wird und das Element in der Wiedergabeliste vorhanden ist Midnight Playlist.


Lassen Sie uns ein Element über ein anderes Terminalfenster in die Midnightplaylist geben, das mit demselben Redis -Datenspeicher verbunden ist.

Lpush MidnightPlayList Song400


Nach der Erschaffung der Midnight Playlist Liste mit dem Element Song400, Das Client -Fenster, das den Befehl BRPOP ausgeführt hat Song400 aus der Wiedergabeliste und gibt die Song -ID sofort als Ausgabe zurück.


Wählen Sie ein Lied von mehreren Wiedergabelisten aus

Es kann mehrere Wiedergabelisten vom Radiosender erstellt werden. Daher sollten wir zu einem bestimmten Zeitpunkt ein Lied von den gegebenen Wiedergabelisten auswählen. Nehmen wir an, wir haben drei Wiedergabelisten: MidnightPlayList1, MidnightPlayList2, Und MidnightPlayList3. Die MidnightPlayList1 ist bereits leer, während die beiden anderen Wiedergabelisten nicht leer sind.

LPush MidnightPlist2 Song1002 Song1005
LPush MidnightPlayList3 Song3000


Rufen wir den Befehl bRPOP mit allen drei Schlüssel an, wie im Folgenden gezeigt:

BRPOP Midnightplaylist1 MidnightPlayList2 MidnightPlayList3 10


Seit dem ersten Schlüssel MidnightPlayList1 ist leer, es wird hier durch den Befehl ignoriert. Es überprüft den ersten nicht leeren Schlüssel aus der verfügbaren Schlüsselliste. Daher lokalisiert der Befehl die MidnightPlayList2 Als erster nicht leerer Schlüssel aus der Reihenfolge der Schlüssel. Wie erwartet die Song1002 wird aus dem entfernt MidnightPlayList2.


Der Befehl BRPOP hat eine konstante Zeitkomplexität in der Nähe des Kopfes und des Schwanzes, wenn eine einzelne Taste angegeben ist. Die Zeitkomplexität wird zu O (n), wenn im Befehl mehrere Schlüssel angegeben werden. Darüber hinaus ist dieser Befehl sehr effizient in den Anwendungen mit geringer Latenz wie einer Warteschlange, Stapel, Zeitleiste in sozialen Medien usw. zu verwenden.

Abschluss

Zusammenfassend lässt sich sagen. Es stehen mehrere Befehle zur Verfügung, um auf den Redis -Listen mit konstanter Zeitkomplexität in der Nähe des Kopfes und des Schwanzes zu arbeiten. Wie bereits erwähnt, wird der BRPOP. Der Befehl BRPOP blockiert die Client -Verbindung, wenn keine Elemente verfügbar sind, um aus den angegebenen Listen zu entfernen. Wie Sie wissen, akzeptiert dieser Befehl mehrere Schlüssel, bei denen ein Element aus der ersten nicht leeren Liste stammt, in der jeder Schlüssel in der Reihenfolge überprüft wird, in der sie an den Befehl übergeben werden.