Redis unterstützt Cursor-basierte Iteratoren. Diese Iteratoren können die Sammlung schrittweise durchlaufen und eine begrenzte Anzahl von Elementen zurückgeben. Gleichzeitig wird der aktualisierte Cursorindex/die iD als Ganzzahl in der nächsten Iteration verwendet. Ein Cursor ist ein Zeiger, der vom Iterator aufrechterhalten wird, um den neuen Standort nach jeder Iteration zu behalten.
Der Scan -Iterator
Der Scan -Befehl ist die Basis für viele andere Redis -Iteratoren. Dieser Iterator garantiert nicht die Anzahl der in jeder Schleife zurückgegebenen Elemente. Es könnte 0 Elemente oder alle Elemente in einer bestimmten Iteration zurückgeben. Außerdem könnte es mehrmals das gleiche Element erzeugen, da sich die Sammlung möglicherweise ändern kann, was ein Nachteil im Scan -Iterator ist. Der Befehl scan gibt zwei Werte in jeder Ausführung zurück. Der erste Wert ist eine Referenz -ID auf den Cursor, und der zweite Wert ist eine Sammlung von Elementen. Es beginnt immer von Cursor 0. Mehrere andere Iteratoren stammen vom Scan -Iterator wie Sscan, HSCAN und ZSCAN. Diese Befehle haben das gleiche Verhalten, arbeiten jedoch auf verschiedenen Arten von Sammlungen.
Die volle Iteration
Da der Scanbefehl nicht garantiert, dass die Anzahl der in jeder Iteration zurückgegebenen Elemente zurückgegeben wird, besteht die einzige Möglichkeit, zu benachrichtigen, dass der Iterator durch die gesamte Sammlung durch die Rückgabe der zurückgegebenen Cursor -Referenz -ID oder -index in jeder Ausführung überprüft wurde. Wenn der zurückgegebene Cursor 0 ist, zeigt dies an, dass alle Elemente iteriert wurden. Es wird eine vollständige Iteration genannt.
Der SSCAN -Befehl
Der SSCAN -Iterator wird vom Scan -Iterator abgeleitet. Daher werden alle Verhaltens.
Syntax
Sscan set_key cursor [Matchmuster] [Graf Count]set_key: Dies ist der Schlüssel des Satzes.
Mauszeiger: Referenz -ID des folgenden Cursors, der nach jedem Anruf zurückgegeben wird.
Die Übereinstimmung und die Anzahl sind zwei optionale Parameter, mit denen die zurückgegebenen Elemente basierend auf einem bestimmten Muster herausgefiltert werden können, und die Anzahl der zurückgegebenen Elemente begrenzen.
Dieser Befehl würde den nächsten Cursor und eine Reihe von Elementen zurückgeben. Die zurückgegebene Cursor -ID kann im nächsten Anruf an den SSCAN -Befehl übergeben werden.
Beispiel 1: Über einen kleinen Satz iterieren
Lassen Sie uns einen Redis -Set mit dem SADD -Befehl erstellen.
sadd setofcolors rot grün schwarz weiß blau rosa grau orange lila gelbgelbDer vorherige Befehl erstellt einen neuen Satz setofcolors und fügen Sie 10 Mitglieder auf ungeordnete Weise hinzu. Wir können den Befehl smembers verwenden, um die vorherige Operation zu überprüfen.
Smembers SetofColorsWie erwartet der Satz setofcolors wurde erfolgreich erstellt.
Wir können den SSCAN -Befehl verwenden, um über die zu iterieren setofcolors Setzen Sie wie im Folgenden gezeigt:
Sscan setofcolors 0Wie bereits erwähnt, sollte der Befehl mit Cursor 0 beginnen. Der Schlüssel des Sets wurde ebenfalls bestanden. Seit der setofcolors Enthält nur 10 Mitglieder, der SSCAN -Befehl könnte alle Elemente in der ersten Iteration zurückgeben. Weil das setofcolors ist ein vergleichsweise kleiner Satz.
Ausgang
Wie erläutert hat der Befehl zwei Werte zurückgegeben, da der erste 0 ist. Es bedeutet, dass das obige eine vollständige Iteration ist. Es ist nicht nötig, Sscan erneut anzurufen. Alle zehn Mitglieder wurden als zweiter Rückgabewert dieses Befehls zurückgegeben.
Beispiel 2: Iterieren Sie über ein großes Set
Wir werden ein Set mit mehr als 20 Mitgliedern erstellen.
Sadd Alphabet a b c d e f g h i j k l m n o p q r s t u v w x y zLasst uns über die iterieren Alphabet Satz.
Sscan Alphabet 0Wie immer haben wir mit dem Cursor 0 begonnen. Außerdem wurde der festgelegte Schlüssel als der übergeben Alphabet. Es gab nur 11 Mitglieder aus der ersten Iteration zurück, wie in Folgendes gezeigt:
Der nächste Cursor ist 6. Rufen wir den Befehl sscan erneut mit den relevanten Argumenten an.
Jetzt gab es weitere 10 Mitglieder und den nächsten Cursor als 13 zurück. Wir müssen den SSCAN -Befehl erneut anrufen, um die vollständige Iteration zu beenden.
Der zurückgegebene Cursorwert ist 0, was bedeutet, dass der Iterator durch den gesamten Satz iteriert wurde.
Beispiel 3: Muster -Matching mit SSCAN
Wir können den Match -Parameter verwenden, um die zurückgegebenen Mitglieder basierend auf einem angegebenen Muster herauszufiltern. Lassen Sie uns ein neues Set namens erstellen Benutzernamen mit einigen Mitgliedern.
Sadd Benutzernamen John Norek Pinku Juwana Jorgia Noton Derek Desman Julia Jumini Piter Pinso DemianWir werden den SSCAN -Befehl mit dem Match -Argument anrufen, um alle Benutzernamen abzurufen, beginnend mit „Ju“,.
Sscan Benutzernamen 0 Match Ju*Ausgang
Wir haben drei Benutzernamen, die von „Ju“ im Set beginnen. Aber es hat nur einen in dieser Iteration zurückgegeben. Daher müssen wir den Befehl sscan erneut mit dem aktualisierten Cursor anrufen.
Sscan Benutzernamen 7 Match Ju*Ausgang
Der Iterator hat alle Elemente im Set durchgeschaltet, und wir haben drei Mitglieder, die unserem Muster entsprechen.
Beispiel 4: Begrenzen Sie die Anzahl der Elemente pro Anruf
Der Befehl redis sscan gibt standardmäßig rund zehn Elemente pro Anruf zurück. Sie können jedoch ausdrücklich die Anzahl der zurückgegebenen Elemente pro Anruf angeben. Dies kann Ihrer Anwendung einen erheblichen Leistungsschub verleihen.
Verwenden wir den vorherigen Satz und begrenzen die Anzahl der zurückgegebenen Elemente pro Anruf auf drei. Normalerweise schwankt die Anzahl der zurückgegebenen Elemente um ca. 3. Wir können den Wert des Zählarguments angeben, um dieses Verhalten zu erreichen.
Sscan Benutzernamen 0 zählen 3Ausgang
Normalerweise kehrt es rund 10 Mitglieder zurück, aber jetzt sind es nur 4 Elemente. Das gleiche geschah auch mit den folgenden Anrufen.
Sscan Benutzernamen 6 Count 3Dies ist sehr nützlich, wenn Sie mit großen Sets zu tun haben.
Abschluss
Redis enthält mehrere Sammelarten wie Sets, Hashes und sortierte Sets. Normalerweise können die Iteratoren verwendet werden, um die Sammlungstypen durchzuführen. Der Scan -Iterator wird verwendet, um Tasten in einer Redis -Datenbank zu iterieren. Es ist ein Cursor-basierter Iterator, der zwei Werte pro Anruf zurückgibt, wobei der erste der aktualisierte Cursor ist und der zweite das Elementarray ist. Der SSCAN. Es kann auch einen Satz basierend auf einem Muster durchsuchen. Außerdem kann der Befehl die Anzahl der zurückgegebenen Elemente pro Anruf einschränken.