Die Spalte Redis-Tutorial führt Sie in die detaillierte Erklärung der Verwendung des Scan-Befehls in Redis ein. Ich hoffe, dass sie Freunden, die ihn benötigen, hilfreich sein wird!
Es gibt ein klassisches Problem in Redis Bei einer großen Datenmenge gibt es zwei Möglichkeiten, Informationen zu finden, die bestimmten Regeln entsprechen:
Einer ist der Schlüssel und grob. Aufgrund der Single-Threaded-Funktion von Redis wird der Schlüsselbefehl auf blockierende Weise ausgeführt. Je mehr Schlüssel in der Redis-Bibliothek vorhanden sind, desto höher ist die Komplexität Die Kosten für die Suchimplementierung sind umso länger, je größer sie sind.
Der zweite Befehl ist der Scan-Befehl, der die Schlüsselwertsuche auf nicht blockierende Weise implementiert. In den meisten Fällen kann er den Schlüsselbefehl ersetzen und ist optionaler.
Schreiben Sie 100.000 Schlüssel*** wie folgt. Testdaten formatieren (ps: Pipeline verwenden, 10.000 Transaktionen, jede Transaktion ist in Sekunden abgeschlossen)
# -*- coding: utf-8 -*- # !/usr/bin/env python3 import redis import sys import datetimedef create_testdata(): r = redis.StrictRedis(host='***.***.***.***', port=***, db=0, password='***') counter = 0 with r.pipeline(transaction=False) as p: for i in range(0, 100000): p.set('key' + str(i), "value" + str(i)) counter = counter + 1 if (counter == 10000): p.execute() counter = 0 print("set by pipline loop") if __name__ == "__main__": create_testdata()
Zum Beispiel, hier beginnen die Schlüssel mit key111?
Wenn Sie den Befehl „keys“ verwenden, führen Sie „keys key1111*“ aus, um alles auf einmal herauszufinden.
Wenn Sie den Scan-Befehl verwenden, verwenden Sie ebenfalls Scan 0 Match Key1111* Count 20.
Der SCAN-Befehl ist ein Cursor-basierter Iterator. Dies bedeutet, dass bei jedem Aufruf des Befehls der vom vorherigen Aufruf zurückgegebene Cursor als Cursorparameter des Aufrufs verwendet werden muss, um den vorherigen Iterationsprozess fortzusetzen.
Der Befehl scan 0 match key1111* count 20 wird hier verwendet, um diese Abfrage abzuschließen. Was ein wenig überraschend ist, ist, dass zu Beginn kein Ergebnis gefunden wurde. Dies hängt vom Prinzip des Scan-Befehls ab.
Wenn der Scan den Schlüssel durchläuft, stellt 0 das erste Mal dar, key1111* stellt die Übereinstimmung gemäß dem Muster dar, das mit key1111 beginnt, und die 20 in Zählung 20 stellt nicht die Ausgabe qualifizierter Schlüssel dar, sondern den Wörterbuchsteckplatz, der die einzelne Durchquerung des Servers begrenzt . Menge (ungefähr gleich).
Also, was sind die Daten des Slots? Ist dieser Slot ein Slot im Redis-Cluster? Die Antwort ist nein. Tatsächlich ist die Antwort bereits im Bild oben gegeben.
Wenn die oben erwähnte Anzahl der „Wörterbuch-Slots“ der Slot im Cluster ist und wir wissen, dass die Anzahl der Slots im Cluster 16384 beträgt, werden nach dem Durchlaufen von 16384 Slots alle wichtigen Informationen durchlaufen
Wie möglich Oben ist deutlich zu sehen: Wenn die Anzahl der durchlaufenen Wörterbuch-Slots 20.000 beträgt, hat der Cursor die Durchlaufergebnisse noch nicht abgeschlossen, sodass dieser Wörterbuch-Slot nicht dem Konzept des Slots im Cluster entspricht.
Nach dem Test hängt die Anzahl der COUNT-Werte, die durchlaufen werden können, um den Schlüssel zu erfüllen, der die Bedingungen erfüllt, von der Anzahl der Schlüssel des jeweiligen Objekts ab.
Wenn Sie mit einer Anzahl scannen, die die Anzahl der Schlüssel überschreitet Wenn die Anzahl der Schlüssel beispielsweise 100.000 beträgt, können die Ergebnisse auf jeden Fall auf einmal durchlaufen werden.
Der Scan-Befehl besteht aus einer Reihe von Befehlen. Zusätzlich zum Durchlaufen aller Schlüssel kann er auch eine bestimmte Sammlung von Containern durchlaufen.
zscan durchläuft die Elemente der zset-Sammlung,
hscan durchläuft die Elemente des Hash-Wörterbuchs und
sscan durchläuft die Elemente der Set-Sammlung.
Der erste Parameter des SSCAN-Befehls, HSCAN-Befehls und ZSCAN-Befehls ist immer ein Datenbankschlüssel (ein angegebener Schlüssel).
Darüber hinaus aktualisiert die Konsole bei Verwendung des Redis-Desktop-Managers beim Aktualisieren einer bestimmten Bibliothek automatisch kontinuierlich den Scan-Befehl, sodass Sie wissen, was er tut
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung des Scan-Befehls in Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!