Maison  >  Article  >  base de données  >  Introduction détaillée aux commandes de type Sorted-Sets dans Redis

Introduction détaillée aux commandes de type Sorted-Sets dans Redis

尚
avant
2019-11-27 17:18:341877parcourir

Introduction détaillée aux commandes de type Sorted-Sets dans Redis

1. Présentation :

Les types Sorted-Sets et Sets sont très similaires. Les membres apparaissent 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. (Recommandé : tutoriel vidéo Redis)

Cependant, il convient de souligner que même si les membres des Sorted-Sets doivent être uniques, les scores peuvent être répétés.

Ajouter, supprimer ou mettre à jour 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. Parce que les positions des membres dans les Sorted-Sets dans l'ensemble sont ordonnées.

Par conséquent, même accéder aux membres au milieu de la collection reste 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 :

Membre d'incrément de clé ZINCRBY Renvoie la liste des membres dont l'index est entre start et stop
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 Sorted-Sets associés à cette clé. Renvoie le nombre de membres dans les ensembles triés. Si la clé n'existe pas, renvoie 0.
ZCOUNT clé min max O(log(N)+M) N en complexité temporelle représente le nombre de membres dans les ensembles triés Quantité, 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)) La complexité temporelle. N in 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 0. , puis ajoutez-le. Score plus 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. , le score est pertinent. Le message d'erreur sera renvoyé Le nouveau score sous la forme d'une chaîne (N)+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. Les paramètres start et stop ici sont tous deux basés sur 0, c'est-à-dire. , 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, c'est un ensemble vide qui sera renvoyé. valeur d'index maximale, la commande renverra la valeur de score de chaque membre depuis le début de la collection. Si le paramètre facultatif WITHSCORES est utilisé dans la commande, 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) 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 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 qui remplit les conditions et renvoyer les membres count 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 qu'il faut expliquer est que les règles pour min et max dans les paramètres se trouvent dans 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.
Touche ZREVRANGE start stop [WITHSCORES] O(log(N)+M) N en complexité temporelle représente Sorted-Set Le nombre de membres en M représente le nombre de membres revenus. 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 haut en bas. 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 clé ZREVRANK 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 clé ZSCORE O(1) Obtenir le score du membre spécifié de la clé spécifiée. Si le membre existe, renvoie son score sous forme de chaîne, sinon renvoie nul.
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] O(log(N)+M) En complexité temporelle, N représente le nombre de membres dans le Sorted-Set, et 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.
ZREMRANGEBYRANK key start stop O(log(N)+M) N en complexité temporelle représente le nombre de membres dans Sorted-Set quantité, 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.
ZREMRANGEBYSCORE clé min max O(log(N)+M) N en complexité temporelle représente le nombre de membres dans Sorted-Set quantité, 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. 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. 1) Il peut être utilisé pour le classement des scores 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 sur les points TOP TEN.

Bien sûr, 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.

Pour plus de connaissances sur Redis, veuillez faire attention à la colonne Tutoriel d'introduction à Redis

.

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 détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer