1. Übersicht:
Sorted-Sets und Sets-Typen sind beide Sammlungen von Zeichenfolgen und erlauben keine doppelten Elemente 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 in der Menge von klein nach groß zu sortieren. Es ist jedoch zu beachten, dass die Ergebnisse wiederholt werden können, obwohl die Mitglieder in Sorted-Sets eindeutig sein müssen.
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. Da die Mitglieder in Sorted-Sets in der Menge geordnet sind, ist selbst der Zugriff auf Mitglieder, die sich in der Mitte der Menge befinden, 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. Zugehörige Befehlsliste:
T
Befehlsprototyp | Zeitkomplexität | Befehlsbeschreibung | Rückgabewert |
ZADD-Schlüssel-Score-Mitglied [score] [member] | O(log(N)) | Das 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 tatsächlich in diesen Vorgang eingefügten Mitglieder. |
ZCARD-Schlüssel | O(1) | Ermitteln Sie die Anzahl der Mitglieder, die in den mit dem 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. |
ZCOUNTkey min max | O(log(N)+M) | N in der Zeitkomplexität stellt die Anzahl der Mitglieder in Sorted-Sets dar, 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)) | Mittlere Zeitkomplexität N 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 Erhöhen Sie dann seine Punktzahl. 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 Punkte, deren Punktzahl mit dem Inkrementparameter zusammenhängt zurückgegeben werden | Die neue Punktzahl als Zeichenfolge )+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 die Mitglieder zurück, deren Reihenfolge innerhalb des durch die Parameter start und stop angegebenen Bereichs liegt, wobei die Parameter start und stop beide auf 0 basieren, d. h. 0 steht für das erste Mitglied und -1 für das letzte Mitglied ist größer als der maximale Indexwert im Sorted-Set oder start > stop, ein leerer Satz wird gelöscht. Rückgabe Wenn stop größer als der maximale Indexwert ist, gibt der Befehl das letzte Mitglied des Satzes von start zurück. Wenn der Befehl über den optionalen Parameter WITHSCORES verfügt, fügt der Befehl den Bewertungswert jedes Mitglieds in das zurückgegebene Ergebnis ein, z. B. Wert1, Bewertung1, Wert2, Bewertung2 ... |
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] | O(log(N)+M) | Zeitkomplexität N repräsentiert die Anzahl der Mitglieder im Sorted-Set, 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 StartsStop[WITHSCORES] | O(log(N)+M) | N in der Zeitkomplexität bedeutet Sorted-Set Die Anzahl der Mitglieder, 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. |
ZREVRANKkey-Mitglied | 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. |
ZSCOREkey-Mitglied | O(1) | Erhalten Sie die Punktzahl des angegebenen Mitglieds des angegebenen Schlüssels | Wenn das Mitglied existiert, bis Gibt seine Punktzahl als Zeichenfolge zurück, andernfalls wird Null zurückgegeben. |
ZREVRANGEBYSCOREkey max min [WITHSCORES] [LIMIT offset count] | O(log(N)+M) | N in der Zeitkomplexität Stellt die dar 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. |
ZREMRANGEBYRANKkey start stop | O(log(N)+M) | N in der Zeitkomplexität stellt die Anzahl der Mitglieder in Sorted-Set dar. M steht für die Anzahl der gelöschten Mitglieder. 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. |
ZREMRANGEBYSCOREkey min max | O(log(N)+M) | N in der Zeitkomplexität stellt die Anzahl der Mitglieder in Sorted-Set dar. M steht für die Anzahl der gelöschten Mitglieder. 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. ZADD/ZCARD/ZCOUNT/ZREM/ZINCRBY/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/ZREMRANGEBYSCORE
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
3. ZREVRANGE/ZREVRANGEBYSCORE/ZREVRANK:
#为后面的示例准备测试数据。 redis 127.0.0.1:6379> del myzset (integer) 0 redis 127.0.0.1:6379> zadd myzset 1 one 2 two 3 three 4 four (integer) 4 #以位置索引从高到低的方式获取并返回此区间内的成员。 redis 127.0.0.1:6379> zrevrange myzset 0 -1 WITHSCORES 1) "four" 2) "4" 3) "three" 4) "3" 5) "two" 6) "2" 7) "one" 8) "1" #由于是从高到低的排序,所以位置等于0的是four,1是three,并以此类推。 redis 127.0.0.1:6379> zrevrange myzset 1 3 1) "three" 2) "two" 3) "one" #由于是从高到低的排序,所以one的位置是3。 redis 127.0.0.1:6379> zrevrank myzset one (integer) 3 #由于是从高到低的排序,所以four的位置是0。 redis 127.0.0.1:6379> zrevrank myzset four (integer) 0 #获取分数满足表达式3 >= score >= 0的成员,并以相反的顺序输出,即从高到底的顺序。 redis 127.0.0.1:6379> zrevrangebyscore myzset 3 0 1) "three" 2) "two" 3) "one" #该命令支持limit选项,其含义等同于zrangebyscore中的该选项,只是在计算位置时按照相反的顺序计算和获取。 redis 127.0.0.1:6379> zrevrangebyscore myzset 4 0 limit 1 2 1) "three" 2) "two"
4. Anwendungsbereich:
1). Kann für die Rangliste eines groß angelegten 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 Befehl ZRANK verwenden, um die Ranglisteninformationen des Spielers über den Benutzernamen abzurufen. 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.
2). Der Sorted-Sets-Typ kann auch zum Erstellen von Indexdaten verwendet werden.
Das Obige ist der Inhalt des Redis-Tutorials (6): Sorted-Sets-Datentyp. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!