Heim  >  Artikel  >  Datenbank  >  Detaillierte Einführung in Befehle vom Typ Sorted-Sets in Redis

Detaillierte Einführung in Befehle vom Typ Sorted-Sets in Redis

尚
nach vorne
2019-11-27 17:18:341916Durchsuche

Detaillierte Einführung in Befehle vom Typ Sorted-Sets in Redis

1. Übersicht:

Sorted-Sets und Sets-Typen sind sehr ähnlich und erlauben keine Duplizierung. Mitglieder erscheinen in einem Set. Der Hauptunterschied zwischen ihnen besteht darin, dass jedem Mitglied in Sorted-Sets eine Punktzahl zugeordnet ist und Redis die Punktzahl verwendet, um die Mitglieder im Satz von klein nach groß zu sortieren. (Empfohlen: Redis-Video-Tutorial)

Es sollte jedoch darauf hingewiesen werden, dass die Elemente in Sorted-Sets zwar eindeutig sein müssen, die Ergebnisse jedoch wiederholt werden können.

Das Hinzufügen, Löschen oder Aktualisieren eines Mitglieds in einem Sorted-Set ist ein sehr schneller Vorgang, und seine zeitliche Komplexität entspricht dem Logarithmus der Anzahl der Mitglieder im Set. Weil die Positionen der Mitglieder in Sorted-Sets im Set geordnet sind.

Daher ist selbst der Zugriff auf Mitglieder in der Mitte der Sammlung immer noch sehr effizient. Tatsächlich ist es schwierig, diese Funktion von Redis in vielen anderen Datenbanktypen zu implementieren. Mit anderen Worten: Um die gleiche Effizienz wie Redis zu erreichen, ist es sehr schwierig, sie in anderen Datenbanken zu implementieren.

2. Liste verwandter Befehle:

ZINCRBY-Schlüsselinkrementmitglied Gibt die Liste der Mitglieder zurück, deren Index zwischen Start und Stopp liegt
Befehlsprototyp Zeitkomplexität Befehlsbeschreibung Rückgabewert
ZADD-Schlüssel-Score-Mitglied [score] [member] O(log(N)) N in der Zeitkomplexität stellt die Anzahl der Mitglieder in Sorted-Sets dar. Fügen Sie alle in den Parametern angegebenen Mitglieder und ihre Bewertungen zum Sorted-Set des angegebenen Schlüssels hinzu. In diesem Befehl können wir mehrere Sätze von Bewertungen/Mitgliedern als Parameter angeben. Wenn ein Mitglied im Parameter beim Hinzufügen bereits vorhanden ist, aktualisiert dieser Befehl die Punktzahl des Mitglieds auf den neuen Wert und ordnet das Mitglied basierend auf dem neuen Wert neu. Wenn der Schlüssel nicht vorhanden ist, erstellt dieser Befehl einen neuen Sorted-Sets-Wert für den Schlüssel und fügt das Ergebnis-/Mitgliedspaar darin ein. Wenn der Schlüssel bereits vorhanden ist, der zugehörige Wert jedoch nicht vom Typ Sorted-Sets ist, wird die entsprechende Fehlermeldung zurückgegeben. Die Anzahl der bei diesem Vorgang tatsächlich eingefügten Mitglieder.
ZCARD-Schlüssel O(1) Ermitteln Sie die Anzahl der Mitglieder, die in den mit diesem Schlüssel verknüpften Sorted-Sets enthalten sind. Gibt die Anzahl der Mitglieder in Sorted-Sets zurück. Wenn der Schlüssel nicht vorhanden ist, wird 0 zurückgegeben.
ZCOUNT key min max O(log(N)+M) N in der Zeitkomplexität stellt die Anzahl der Mitglieder in Sorted-Sets dar Menge, M stellt die Anzahl der Elemente zwischen min und max dar. Mit diesem Befehl wird die Anzahl der Mitglieder ermittelt, deren Punktzahl zwischen Minimum und Maximum liegt. Eine zusätzliche Erklärung für die Parameter „min“ und „max“ besteht darin, dass -inf und +inf den höchsten bzw. niedrigsten Wert der Punktzahlen in Sorted-Sets darstellen. Standardmäßig ist der durch Min und Max dargestellte Bereich ein geschlossener Intervallbereich, d. h. Mitglieder innerhalb von Min <= Score <= Max werden zurückgegeben. Wir können jedoch ein offenes Intervall darstellen, indem wir das Zeichen „(“ vor „min“ und „max“ hinzufügen, z. B. (min max steht für min < Punktzahl <= max und (min (max steht für min < Punktzahl < max . Die Anzahl der Mitglieder im angegebenen Bruchbereich
O(log(N)) Zeitkomplexität N in stellt die Anzahl der Mitglieder in den Sorted-Sets dar. Dieser Befehl erhöht die angegebene Punktzahl für das angegebene Mitglied im angegebenen Schlüssel. Wenn das Mitglied nicht vorhanden ist, fügt der Befehl das Mitglied hinzu und geht davon aus, dass seine anfängliche Punktzahl 0 ist und fügen Sie ihn dann hinzu. Wenn der Schlüssel nicht vorhanden ist, erstellt dieser Befehl den Schlüssel und die zugehörigen Sorted-Sets und enthält die durch den Parameter angegebenen Elemente , die Punktzahl ist relevant. Die neue Punktzahl in Form einer Zeichenfolge (N)+M) Das N in der Zeitkomplexität stellt die Zahl dar Anzahl der Mitglieder im Sorted-Set, und M stellt die Anzahl der zurückgegebenen Mitglieder dar. Dieser Befehl gibt die Mitglieder zurück, deren Reihenfolge innerhalb des durch die Parameter start und stop angegebenen Bereichs liegt , 0 stellt das erste Mitglied dar und -1 stellt das letzte Mitglied dar. Wenn Start größer als der maximale Indexwert im Sorted-Set ist, oder wenn Start > Stopp ist, wird ein leerer Satz zurückgegeben Bei maximalem Indexwert gibt der Befehl den Bewertungswert jedes Mitglieds vom Anfang an an die Sammlung zurück. Wenn der optionale Parameter WITHSCORES im Befehl verwendet wird, schließt der Befehl den Bewertungswert jedes Mitglieds in das zurückgegebene Ergebnis ein , Punktzahl1, Wert2, Punktzahl2....  
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] O(log(N)+M) Das N in der Zeitkomplexität stellt die Anzahl der Mitglieder im Sorted-Set dar, und M stellt die Anzahl der zurückgegebenen Mitglieder dar.Dieser Befehl gibt alle Mitglieder mit Werten zwischen Min und Max zurück, d Mitglied hat Wenn die Bewertungen gleich sind, werden die Mitglieder in lexikografischer Reihenfolge zurückgegeben. Der optionale Parameter LIMIT wird verwendet, um die Anzahl der zurückgegebenen Mitglieder zu begrenzen. Der optionale Parameter „Offset“ bedeutet, dass die Rückgabe ausgehend von dem Offset-Element erfolgt, das die Bedingungen erfüllt, und gleichzeitig die Anzahl der Elemente zurückgegeben wird. Die Bedeutung des optionalen Parameters WITHSCORES bezieht sich auf die Beschreibung dieser Option in ZRANGE. Als letztes muss noch erklärt werden, dass die Regeln für Min und Max in den Parametern im Befehl ZCOUNT zu finden sind. Gibt eine Liste von Mitgliedern zurück, deren Punktzahlen innerhalb des angegebenen Bereichs liegen.
ZRANK-Schlüsselmitglied O(log(N)) ​ ​   Das N in der Zeitkomplexität stellt die Anzahl der Mitglieder im Sorted-Set dar. Die Mitglieder im Sorted-Set werden in der Reihenfolge von der niedrigsten zur höchsten Punktzahl gespeichert. Dieser Befehl gibt den Positionswert des im Parameter angegebenen Mitglieds zurück, wobei 0 das erste Mitglied darstellt, das das Mitglied mit der niedrigsten Punktzahl im Sorted-Set ist -Satz. Wenn das Mitglied existiert, geben Sie seinen Positionsindexwert zurück. Andernfalls wird Null zurückgegeben.
ZREM-Schlüsselmitglied [Mitglied ...] O(M log(N)) N in der Zeitkomplexität repräsentiert Sorted-Set The Die Anzahl der Mitglieder in M ​​stellt die Anzahl der gelöschten Mitglieder dar. Dieser Befehl entfernt die in den Parametern angegebenen Mitglieder und nicht vorhandene Mitglieder werden ignoriert. Wenn der mit dem Schlüssel verknüpfte Wert kein Sorted-Set ist, wird die entsprechende Fehlermeldung zurückgegeben. Die tatsächliche Anzahl der gelöschten Mitglieder.
ZREVRANGE-Taste Start Stop [WITHSCORES] O(log(N)+M) N in der Zeitkomplexität repräsentiert Sorted-Set Die Zahl der Mitglieder in M ​​stellt die Anzahl der zurückgegebenen Mitglieder dar. Die Funktion dieses Befehls ist im Grunde die gleiche wie bei ZRANGE. Der einzige Unterschied besteht darin, dass dieser Befehl die Elemente an der angegebenen Position durch umgekehrte Sortierung erhält, d. h. von hoher nach niedriger Reihenfolge. Wenn Mitglieder die gleiche Punktzahl haben, werden sie in absteigender lexikografischer Reihenfolge sortiert. Gibt die angegebene Mitgliederliste zurück.
ZREVRANK-Schlüsselmitglied O(log(N)) Das N in der Zeitkomplexität stellt die Anzahl der Mitglieder im Sorted-Set dar . Die Funktion dieses Befehls ist im Grunde die gleiche wie bei ZRANK. Der einzige Unterschied besteht darin, dass der durch diesen Befehl erhaltene Index die Position nach der Sortierung von hoch nach niedrig ist. Ebenso stellt 0 das erste Element dar, dh das Mitglied mit der höchsten Punktzahl . Wenn das Mitglied existiert, geben Sie seinen Positionsindexwert zurück. Andernfalls wird Null zurückgegeben.
ZSCORE-Schlüsselmitglied O(1) Ruft die Punktzahl des angegebenen Mitglieds des angegebenen Schlüssels ab. Wenn das Mitglied existiert, geben Sie seine Punktzahl als Zeichenfolge zurück, andernfalls geben Sie Null zurück.
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] O(log(N)+M) Zeitkomplexität in N repräsentiert die Anzahl der Mitglieder im Sorted-Set, und M stellt die Anzahl der zurückgegebenen Mitglieder dar. Abgesehen davon, dass die Sortiermethode dieses Befehls auf der Score-Sortierung von hoch nach niedrig basiert, sind andere Funktionen und Parameterbedeutungen dieselben wie ZRANGEBYSCORE. Gibt eine Liste von Mitgliedern zurück, deren Punktzahlen innerhalb des angegebenen Bereichs liegen.
ZREMRANGEBYRANK Schlüssel Start Stopp O(log(N)+M) N in der Zeitkomplexität stellt die Anzahl der Mitglieder im Sorted-Set dar Menge, M stellt die Anzahl der gelöschten Mitglieder dar. Löschen Sie das Mitglied, dessen Indexposition zwischen Start und Stopp liegt. Sowohl Start als auch Stopp basieren auf 0, d. h. 0 steht für das Mitglied mit der niedrigsten Punktzahl und -1 für das letzte Mitglied, das das Mitglied mit der höchsten Punktzahl ist. Die Anzahl der gelöschten Mitglieder.
ZREMRANGEBYSCORE Schlüssel min max O(log(N)+M) N in der Zeitkomplexität stellt die Anzahl der Mitglieder im Sorted-Set dar Menge, M stellt die Anzahl der gelöschten Mitglieder dar. Löschen Sie alle Mitglieder, deren Punktzahl zwischen Min und Max liegt, d. h. alle Mitglieder, die den Ausdruck min <= Score <= max erfüllen. Für Min- und Max-Parameter können sie in offenen Intervallen ausgedrückt werden. Spezifische Regeln finden Sie unter ZCOUNT. Die Anzahl der gelöschten Mitglieder.

3. Befehlsbeispiele:

1. ZSCORE/ZRANGE/ZRANK:

    #在Shell的命令行下启动Redis客户端工具。
    /> redis-cli
    #添加一个分数为1的成员。
    redis 127.0.0.1:6379> zadd myzset 1 "one"
    (integer) 1
    #添加两个分数分别是2和3的两个成员。
    redis 127.0.0.1:6379> zadd myzset 2 "two" 3 "three"
    (integer) 2
    #0表示第一个成员,-1表示最后一个成员。WITHSCORES选项表示返回的结果中包含每个成员及其分数,否则只返回成员。
    redis 127.0.0.1:6379> zrange myzset 0 -1 WITHSCORES
    1) "one"
    2) "1"
    3) "two"
    4) "2"
    5) "three"
    6) "3"
    #获取成员one在Sorted-Set中的位置索引值。0表示第一个位置。
    redis 127.0.0.1:6379> zrank myzset one
    (integer) 0
    #成员four并不存在,因此返回nil。
    redis 127.0.0.1:6379> zrank myzset four
    (nil)
    #获取myzset键中成员的数量。    
    redis 127.0.0.1:6379> zcard myzset
    (integer) 3
    #返回与myzset关联的Sorted-Set中,分数满足表达式1 <= score <= 2的成员的数量。
    redis 127.0.0.1:6379> zcount myzset 1 2
    (integer) 2
    #删除成员one和two,返回实际删除成员的数量。
    redis 127.0.0.1:6379> zrem myzset one two
    (integer) 2
    #查看是否删除成功。
    redis 127.0.0.1:6379> zcard myzset
    (integer) 1
    #获取成员three的分数。返回值是字符串形式。
    redis 127.0.0.1:6379> zscore myzset three
    "3"
    #由于成员two已经被删除,所以该命令返回nil。
    redis 127.0.0.1:6379> zscore myzset two
    (nil)
    #将成员one的分数增加2,并返回该成员更新后的分数。
    redis 127.0.0.1:6379> zincrby myzset 2 one
    "3"
    #将成员one的分数增加-1,并返回该成员更新后的分数。
    redis 127.0.0.1:6379> zincrby myzset -1 one
    "2"
    #查看在更新了成员的分数后是否正确。
    redis 127.0.0.1:6379> zrange myzset 0 -1 WITHSCORES
    1) "one"
    2) "2"
    3) "two"
    4) "2"
    5) "three"
    6) "3"

2, ZRANGEBYSCORE/ZREMRANGEBYRANK/ZREMRANGEBYSCOR Ank:

    redis 127.0.0.1:6379> del myzset
    (integer) 1
    redis 127.0.0.1:6379> zadd myzset 1 one 2 two 3 three 4 four
    (integer) 4
    #获取分数满足表达式1 <= score <= 2的成员。
    redis 127.0.0.1:6379> zrangebyscore myzset 1 2
    1) "one"
    2) "two"
    #获取分数满足表达式1 < score <= 2的成员。
    redis 127.0.0.1:6379> zrangebyscore myzset (1 2
    1) "two"
    #-inf表示第一个成员,+inf表示最后一个成员,limit后面的参数用于限制返回成员的自己,
    #2表示从位置索引(0-based)等于2的成员开始,去后面3个成员。
    redis 127.0.0.1:6379> zrangebyscore myzset -inf +inf limit 2 3
    1) "three"
    2) "four"
    #删除分数满足表达式1 <= score <= 2的成员,并返回实际删除的数量。
    redis 127.0.0.1:6379> zremrangebyscore myzset 1 2
    (integer) 2
    #看出一下上面的删除是否成功。
    redis 127.0.0.1:6379> zrange myzset 0 -1
    1) "three"
    2) "four"
    #删除位置索引满足表达式0 <= rank <= 1的成员。
    redis 127.0.0.1:6379> zremrangebyrank myzset 0 1
    (integer) 2
    #查看上一条命令是否删除成功。
    redis 127.0.0.1:6379> zcard myzset
    (integer) 0

4. Anwendungsbereich:

1). Es kann für die Punkte-Rangliste eines großen Online-Spiels verwendet werden. Immer wenn sich die Punktzahl des Spielers ändert, können Sie den Befehl ZADD ausführen, um die Punktzahl des Spielers zu aktualisieren, und dann den Befehl ZRANGE verwenden, um die Benutzerinformationen der TOP TEN-Punkte abzurufen. Natürlich können wir auch den ZRANK-Befehl verwenden, um die Ranglisteninformationen des Spielers über den Benutzernamen zu erhalten. Schließlich werden wir die Befehle ZRANGE und ZRANK in Kombination verwenden, um schnell Informationen über andere Benutzer mit ähnlichen Punkten wie ein bestimmter Spieler zu erhalten.

Weitere Redis-Kenntnisse finden Sie in der Spalte

Redis-Einführungs-Tutorial

.

2) Der Sorted-Sets-Typ kann auch zum Erstellen von Indexdaten verwendet werden.

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in Befehle vom Typ Sorted-Sets in Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen