作者:---残月_235_999 | 来源:互联网 | 2023-08-26 19:45
一:概述 zset全称为sorted-sets类型,和set数据类型有极为相似,都是字符串的集合,都不允许重复的成员 出现在一个set中.两者的主要区别是zset的每一个成员都会有一个分数(score)与之关联.redis正是通过分数来为集合中的成员进行从小到大的排序.zset的成员是唯
一:概述 zset全称为sorted-sets类型,和set数据类型有极为相似,都是字符串的集合,都不允许重复的成员 出现在一个set中.两者的主要区别是zset的每一个成员都会有一个分数(score)与之关联.redis正是通过分数来为集合中的成员进行从小到大的排序.zset的成员是唯一的,但分数(score)却可以重复. 在zset中添加、删除或更新一个成员都是非常快速的操作,其时间复杂度为集合中成员数量的对数.
Sorted-Sets中的成员在集合中的位置是有序的.
二:相关命令
1: zadd 命令格式: zadd key score member [[score] [member] …]
描述:将一个或多个 member 元素及其 score 值加入到有序集 key 当中.如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。score 值可以是整数值或双精度浮点数。如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。当 key 存在但不是有序集类型时,返回一个错误。
时间复杂度: O(M*log(N)), N 是有序集的基数, M 为成功添加的新成员的数量 返回值:被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。
操作命令如下:
#添加一个元素 redis 127.0.0.1:6379> zadd zset_list 11 test1 (integer) 1
#添加多个元素 redis 127.0.0.1:6379> zadd zset_list 9 test2 10 test3 (integer) 2
#查看元素 redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores 1) “test2″ 2) “9″ 3) “test3″ 4) “10″ 5) “test1″ 6) “11″ redis 127.0.0.1:6379> zrange zset_list 0 -1 1) “test2″ 2) “test3″ 3) “test1″
# 添加已存在元素,且 score 值不变 操作不成功返回0 redis 127.0.0.1:6379> zadd zset_list 10 test1 (integer) 0
redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores 1) “test2″ 2) “9″ 3) “test1″ 4) “10″ 5) “test3″ 6) “10″
# 添加已存在元素,但是改变 score 值 redis 127.0.0.1:6379> zadd zset_list 7 test1 (integer) 0 redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores 1) “test1″ 2) “7″ 3) “test2″ 4) “9″ 5) “test3″ 6) “10″2:zrem 命令格式: ZREM key member [member ...]
描述:移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。 当 key 存在但不是有序集类型时,返回一个错误。 时间复杂度:O(M*log(N)), N 为有序集的基数, M 为被成功移除的成员的数量。 返回值:被成功移除的成员的数量,不包括被忽略的成员。 操作命令如下:
redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores 1) “test1″ 2) “7″ 3) “test2″ 4) “9″ 5) “test3″ 6) “10″
#移除单个元素 redis 127.0.0.1:6379> zrem zset_list test1 (integer) 1 redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores 1) “test2″ 2) “9″ 3) “test3″ 4) “10″ #移除多个 redis 127.0.0.1:6379> zrem zset_list test2 test3 (integer) 2 redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores (empty list or set)
# 移除不存在元素 redis 127.0.0.1:6379> zrem zset_list non-exists-element (integer) 0
3:zcard 描述:返回zset集合的成员数 时间复杂度:O(1) 返回值:当 key 存在且是有序集(zset)类型时,返回集合内的成员数。不存在返回0。 操作命令如下: redis 127.0.0.1:6379> zcard zset_list (integer) 0 redis 127.0.0.1:6379> zadd zset_list 1 test1 (integer) 1 redis 127.0.0.1:6379> zcard zset_list (integer) 1
4:zcount 命令格式:ZCOUNT key min max 描述:返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。 时间复杂度: O(log(N)+M), N 为有序集的基数, M 为值在 min 和 max 之间的元素的数量。 返回值:score 值在 min 和 max 之间的成员的数量。 操作命令如下: redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores 1) “test1″ 2) “1″ 3) “test2″ 4) “100″ 5) “test3″ 6) “200″ 7) “test4″ “300″ redis 127.0.0.1:6379> zcount zset_list 100 200 (integer) 2 redis 127.0.0.1:6379> zcount zset_list 100 300 (integer) 35: zscore 命令格式:ZSCORE key member 描述:返回有序集 key 中,成员 member 的 score 值。 如果 member 元素不是有序集 key 的成员,或 key 不存在,返回 nil 。 时间复杂度:O(1) 操作命令如下: redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores 1) “test1″ 2) “1″ 3) “test2″ 4) “100″ 5) “test3″ 6) “200″ 7) “test4″ “300″ redis 127.0.0.1:6379> zscore zset_list test2 “100″
6:zincrby 命令格式:ZINCRBY key increment member 描述:为有序集 key 的成员 member 的 score 值加上增量 increment 。 时间复杂度:O(log(N)) 返回值: 返回member 成员的新 score 值,以字符串形式表示。 操作命令如下: redis 127.0.0.1:6379> zscore zset_list test2 “100″ redis 127.0.0.1:6379> redis 127.0.0.1:6379> zincrby zset_list 10 test2 “110″ redis 127.0.0.1:6379> zincrby zset_list -6 test2 “104″7:zrange 命令格式: ZRANGE key start stop [WITHSCORES] 描述:返回指定区间的成员。其中成员位置按 score 值递增(从小到大)来排序。 WITHSCORES选项是用来让成员和它的score值一并返回.(在前面我们已经用到过) 时间复杂度:O(log(N)+M), N 为有序集的基数,而 M 为结果集的基数。 返回值:返回指定区间的成员列表. 操作命令如下:
redis 127.0.0.1:6379> zrange zset_list 0 -1 1) “test1″ 2) “test2″ 3) “test3″ 4) “test4″ redis 127.0.0.1:6379> zrange zset_list 0 -1 withscores 1) “test1″ 2) “1″ 3) “test2″ 4) “104″ 5) “test3″ 6) “200″ 7) “test4″ “300″
#当给定区间不存在于有序集时的情况 redis 127.0.0.1:6379> zrange zset_list 10000 30000 withscores (empty list or set)
7:zrevrange 命令格式:ZREVRANGE key start stop [WITHSCORES] 描述:和zrange一样使用,唯一不同是其成员位置按 score 值递减(从大到小)来排列。8:zrangebyscore 命令格式:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 描述:返回有序集key中所有score值介于min与max之间(包括等于)的成员.成员按score值递增(从小到大)排列 。min 和 max 可以是 -inf 和 +inf 可选limit参数指定返回结果的数量及区间。 时间复杂度:O(log(N)+M), N 为有序集的基数, M 为被结果集的基数。 返回值:指定区间内,带有 score 值(可选)的有序集成员的列表。 操作命令如下: redis 127.0.0.1:6379> zrangebyscore zset_list -inf +inf 1) “test1″ 2) “test2″ 3) “test3″ 4) “test4″ redis 127.0.0.1:6379> zrangebyscore zset_list -inf +inf withscores 1) “test1″ 2) “1″ 3) “test2″ 4) “104″ 5) “test3″ 6) “200″ 7) “test4″ “300″ redis 127.0.0.1:6379> zrangebyscore zset_list -inf 100 withscores 1) “test1″ 2) “1″
#显示大于100 小于等于700的成员 redis 127.0.0.1:6379> zrangebyscore zset_list (100 700 1) “test2″ 2) “test3″ 3) “test4″
#显示条件 100 redis 127.0.0.1:6379> zrangebyscore zset_list (100 (700 1) “test2″ 2) “test3″ 3) “test4″8:zrevrangebyscore 命令格式: zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count] 描述:和zrangebyscoreg一样,唯一不同的是成员按 score 值递减(从大到小)的次序排列。
9:zrank 命令格式: zrank key member 描述:返回有序集key中成员member的排名。成员按 score 值递增(从小到大)顺序排列。 排名以0开始,也就是说score 值最小的为0. 时间复杂度:O(log(N)) 返回值:返回成员排名,member不存在返回nil.
9:zrevrank 命令格式: zrevrank key member 描述:返回有序集key中成员member的排名。成员按 score 值递增(从大到小)顺序排列。 排名以0开始,也就是说score 值最大的为0. 时间复杂度:O(log(N)) 返回值:返回成员排名,member不存在返回nil.10:zremrangebyrank 命令格式: ZREMRANGEBYRANK key start stop 描述:移除有序集 key 中,指定排名(rank)区间内的所有成员。区间分别以下标参数 start 和 stop 指出,包含 start 和 stop 在内。 下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。 你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。 时间复杂度:O(log(N)+M), N 为有序集的基数,而 M 为被移除成员的数量。 返回值:被移除成员的数量。
11:zremrangebyscore 命令格式:zremrangebyscore key min max 描述:移除score值介于min和max之间(等于)的成员 时间复杂度:O(log(N)+M), N 为有序集的基数,而 M 为被移除成员的数量。 返回值:被移除成员的数量。 操作如下: # 移除所有score在 150 到 350 内的数据 redis> zremrangebyscore zset_list 100 200 (integer) 1
12:zunionstore 命令格式:ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] 描述:计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之 和 。12: zinterstore 命令格式:ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX] 描述:计算给定的一个或多个有序集的交集。其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之 和 。 时间复杂度: O(N*K)+O(M*log(M)), N 为给定 key 中基数最小的有序集, K 为给定有序集的数量, M 为结果集的基数。 返回值:保存到 destination 的结果集成员数。 操作命令如下: redis 127.0.0.1:6379> zrange z_ulist_1 0 -1 withscores 1) “jack” 2) “20″ 3) “abc” 4) “30″ 5) “bb” 6) “50″ 7) “cc” “50″ redis 127.0.0.1:6379> zadd z_ulist_2 20 bb 40 789 48 a980 (integer) 3 redis 127.0.0.1:6379> zinterstore z_ulist_x 2 z_ulist_1 z_ulist_2 (integer) 1 redis 127.0.0.1:6379> zrange z_ulist_x 0 -1 withscores 1) “bb” 2) “70″