1. Présentation :
Les types Sorted-Sets et Sets sont très similaires. Ce sont tous deux des collections de chaînes et ne permettent pas aux membres en double d'apparaître dans un ensemble. La principale différence entre eux est que chaque membre des Sorted-Sets sera associé à un score, et Redis utilise le score pour trier les membres de l'ensemble de petit à grand. Cependant, il convient de noter que même si les membres des Sorted-Sets doivent être uniques, les scores peuvent être répétés.
L'ajout, la suppression ou la mise à jour d'un membre dans un Sorted-Set est une opération très rapide, et sa complexité temporelle est le logarithme du nombre de membres dans l'ensemble. Étant donné que les membres des Sorted-Sets sont ordonnés dans l'ensemble, même l'accès aux membres situés au milieu de l'ensemble est toujours très efficace. En fait, cette fonctionnalité de Redis est difficile à implémenter dans de nombreux autres types de bases de données. En d'autres termes, pour obtenir la même efficacité que Redis à ce stade, il est très difficile de la modéliser dans d'autres bases de données.
2. Liste des commandes associées :
T
Prototype de commande | Complexité temporelle | Description de la commande | Valeur de retour |
Membre du score clé ZADD [score] [membre] | O(log(N)) | N en complexité temporelle représente le nombre de membres dans les ensembles triés. Ajoutez tous les membres spécifiés dans les paramètres et leurs scores au Sorted-Set de la clé spécifiée. Dans cette commande, nous pouvons spécifier plusieurs ensembles de scores/membres comme paramètres. Si un membre du paramètre existe déjà lors de son ajout, cette commande mettra à jour le score du membre avec la nouvelle valeur et réorganisera le membre en fonction de la nouvelle valeur. Si la clé n'existe pas, cette commande créera une nouvelle valeur d'ensembles triés pour la clé et y insérera la paire partition/membre. Si la clé existe déjà, mais que la valeur associée n'est pas de type Sorted-Sets, le message d'erreur correspondant sera renvoyé. | Le nombre de membres réellement insérés dans cette opération. |
Clé ZCARD | O(1) | Obtenir le nombre de membres contenus dans les ensembles triés associés à la clé. | Renvoie le nombre de membres dans les ensembles triés. Si la clé n'existe pas, renvoie 0. |
ZCOUNTkey min max | O(log(N) M) | N en complexité temporelle représente le nombre de membres dans les ensembles triés, M représente le nombre d'éléments entre min et max. Cette commande permet d'obtenir le nombre de membres dont le score est compris entre min et max. Une explication supplémentaire pour les paramètres min et max est que -inf et inf représentent respectivement les valeurs les plus élevées et les plus basses des scores dans les ensembles triés. Par défaut, la plage représentée par min et max est une plage d'intervalles fermés, c'est-à-dire que les membres compris dans min <= score <= max seront renvoyés. Cependant, nous pouvons représenter un intervalle ouvert en ajoutant le caractère "(" devant min et max, tel que (min max représente min < score <= max, et (min (max représente min < score < max . | Le nombre de membres dans la plage de fractions spécifiée |
O(log(N)) | Complexité temporelle moyenne. N représente le nombre de membres dans les ensembles triés. Cette commande augmentera le score spécifié pour le membre spécifié dans la clé spécifiée. Si le membre n'existe pas, la commande ajoutera le membre et supposera que son score initial est de 0, et puis augmentez son score. Ajoutez un incrément. Si la clé n'existe pas, cette commande créera la clé et ses ensembles triés associés, et contiendra les membres spécifiés par le paramètre, dont les scores sont liés au paramètre d'incrément. être renvoyé | Le nouveau score sous forme de chaîne.) M) | Le N dans la complexité temporelle représente le nombre de membres dans l'ensemble trié, et M représente le nombre de membres renvoyés. Cette commande renvoie les membres dont l'ordre se situe dans la plage spécifiée par les paramètres start et stop, où start et stop sont tous basés sur 0, c'est-à-dire que 0 représente le premier membre et -1 représente le dernier membre si start est. supérieur à la valeur d'index maximale dans l'ensemble trié, ou start > stop, un ensemble vide sera renvoyé Si stop est supérieur à la valeur d'index maximale, la commande renverra le dernier membre de l'ensemble depuis le début. La commande a le paramètre facultatif WITHSCORES, la commande inclura la valeur de score de chaque membre dans le résultat renvoyé, tel que value1 ,score1,value2,score2... |
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] | O(log(N) M) | N en complexité temporelle Représente le nombre de membres dans l'ensemble trié, et M représente le nombre de membres renvoyés. Cette commande renverra tous les membres avec des scores compris entre min et max, c'est-à-dire les membres qui satisfont à l'expression min <= score <= max, où les membres renvoyés sont renvoyés dans l'ordre de leurs scores de bas en haut si le. membre a Si les scores sont les mêmes, les membres sont retournés par ordre lexicographique. Le paramètre facultatif LIMIT est utilisé pour limiter le nombre de membres renvoyés. Le paramètre facultatif offset signifie revenir à partir du membre offset-ième qui remplit les conditions et renvoyer le nombre de membres en même temps. La signification du paramètre optionnel WITHSCORES fait référence à la description de cette option dans ZRANGE. La dernière chose à expliquer est que les règles pour min et max dans les paramètres peuvent être référées à la commande ZCOUNT. | Renvoie une liste de membres dont les scores se situent dans la plage spécifiée. |
Membre clé ZRANK | O(log(N)) | Le N dans la complexité temporelle représente le nombre de membres dans l'ensemble trié . Les membres du Sorted-Set sont stockés dans l'ordre des scores les plus faibles aux plus élevés. Cette commande renverra la valeur de position du membre spécifié dans le paramètre, où 0 représente le premier membre, qui est le membre avec le score le plus bas dans le Sorted-Set. -Ensemble. | Si le membre existe, renvoie sa valeur d'index de position. Sinon, retournez zéro. |
Membre clé ZREM [membre ...] | O(M log(N)) | N en complexité temporelle représente l'ensemble trié. le nombre de membres en M représente le nombre de membres supprimés. Cette commande supprimera les membres spécifiés dans les paramètres et les membres qui n'existent pas seront ignorés. Si la valeur associée à la clé n'est pas un ensemble trié, le message d'erreur correspondant sera renvoyé. | Le nombre réel de membres supprimés. |
La clé ZREVRANGE démarrearrêt[WITHSCORES] | O(log(N) M) | N en complexité temporelle représente les membres de Sorted-Set Le nombre, M représente le nombre de membres renvoyés. La fonction de cette commande est fondamentalement la même que celle de ZRANGE. La seule différence est que cette commande obtient les membres à la position spécifiée par tri inverse, c'est-à-dire de l'ordre élevé à l'ordre inférieur. Si les membres ont le même score, ils sont triés par ordre lexicographique décroissant. | Renvoie la liste des membres spécifiée. |
Membre ZREVRANKkey | O(log(N)) | Le N dans la complexité temporelle représente le nombre de membres dans l'ensemble trié. La fonction de cette commande est fondamentalement la même que celle de ZRANK. La seule différence est que l'index obtenu par cette commande est la position après tri de haut en bas. De même, 0 représente le premier élément, c'est-à-dire le membre avec le score le plus élevé. . | Si le membre existe, renvoie sa valeur d'index de position. Sinon, retournez zéro. |
Membre ZSCOREkey | O(1) | Obtenir le score du membre spécifié de la clé spécifiée | Si le membre existe, to renvoie son score sous forme de chaîne, sinon renvoie nul. |
ZREVRANGEBYSCOREkey max min [WITHSCORES] [LIMIT offset count] | O(log(N) M) | N représentation en complexité temporelle Le nombre de membres dans le Sorted-Set, M représente le nombre de membres renvoyés. Sauf que la méthode de tri de cette commande est basée sur le tri des scores de haut en bas, les autres fonctions et significations des paramètres sont les mêmes que ZRANGEBYSCORE. | Renvoie une liste de membres dont les scores se situent dans la plage spécifiée. |
ZREMRANGEBYRANKkey start stop | O(log(N) M) | N en complexité temporelle représente le nombre de membres dans Sorted-Set, M représente le nombre de membres supprimés. Supprimez le membre dont la position d'index se situe entre start et stop. Start et stop sont tous deux basés sur 0, c'est-à-dire que 0 représente le membre avec le score le plus bas et -1 représente le dernier membre, qui est le membre avec le score le plus élevé. | Le nombre de membres supprimés. |
ZREMRANGEBYSCOREkey min max | O(log(N) M) | N en complexité temporelle représente le nombre de membres dans Sorted-Set, M représente le nombre de membres supprimés. Supprimez tous les membres dont les scores sont compris entre min et max, c'est-à-dire tous les membres qui satisfont à l'expression min <= score <= max. Pour les paramètres min et max, ils peuvent être exprimés en intervalles ouverts. Pour des règles spécifiques, reportez-vous à ZCOUNT. | Le nombre de membres supprimés. |
3. Exemples de commandes :
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. Champ d'application :
1). Peut être utilisé pour le classement d'un jeu en ligne à grande échelle. Chaque fois que le score du joueur change, vous pouvez exécuter la commande ZADD pour mettre à jour le score du joueur, puis utiliser la commande ZRANGE pour obtenir les informations utilisateur des points TOP TEN. Bien entendu, nous pouvons également utiliser la commande ZRANK pour obtenir les informations de classement du joueur via le nom d'utilisateur. Enfin, nous utiliserons les commandes ZRANGE et ZRANK en combinaison pour obtenir rapidement des informations sur d'autres utilisateurs ayant des points similaires à ceux d'un certain joueur.
2). Le type Sorted-Sets peut également être utilisé pour créer des données d'index.
Ce qui précède est le contenu du didacticiel Redis (6) : type de données Sorted-Sets. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !