目录
ZADD 加入有序集
ZCARD 取成员数量
ZCOUNT 计算区间成员数量
ZINCRBY 运算
ZRANGE 取区间成员(升序)
ZRANGEBYSCORE 按分值排序取成员
ZRANK 取成员排名
ZREM 移除成员
ZREMRANGEBYRANK 按位置区间批量移除
ZREMRANGEBYSCORE 按分值区间移除
ZREVRANGE 取区间成员(降序)
ZREVRANGEBYSCORE 取分值成员(逆序)
ZREVRANK 取成员提名(降序)
ZSCORE 取成员的分值
ZUNIONSTORE 合并多个有序集
ZINTERSTORE 多个集合取成员交集
ZSCAN 迭代
语法:ZADD key score member [[score member] [score member] ...]。
将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd z1 8 a 1 b 5 c # 对一个不存在的key操作
(integer) 3
127.0.0.1:6379> zadd z1 2 b # 添加已存在的元素
(integer) 0
127.0.0.1:6379> set name cxian
OK
127.0.0.1:6379> zadd name 1 a # 对非有序集key操作,报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂订O(M*log(N)), N 是有序集的基数, M 为成功添加的新成员的数量。
返回值:
语法:ZCARD key。
返回有序集 key 的基数。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd z1 8 a 1 b 5 c
(integer) 3
127.0.0.1:6379> zcard z1 # 对非空有序集执行zcard命令
(integer) 3
127.0.0.1:6379> zcard z2 # 对不存在key执行zcard命令
(integer) 0
127.0.0.1:6379> set name cxian
OK
127.0.0.1:6379> zcard name # 对非有序集执行zcard命令
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(1)。
返回值:
语法:ZCOUNT key min max。
返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。
127.0.0.1:6379[9]> flushdb
OK
127.0.0.1:6379[9]> zrange s1 0 -1
(empty array)
127.0.0.1:6379[9]> zadd s1 2500 name1
(integer) 1
127.0.0.1:6379[9]> zadd s1 3000 name2
(integer) 1
127.0.0.1:6379[9]> zadd s1 5000 name3
(integer) 1
127.0.0.1:6379[9]> zrange s1 0 -1
1) "name1"
2) "name2"
3) "name3"
127.0.0.1:6379[9]> zcount s1 4000 5000 # 计算分数在4000-5000之间的元素
(integer) 1
时间复杂度O(log(N)+M), N 为有序集的基数, M 为值在 min 和 max 之间的元素的数量。
返回值:
语法:ZINCRBY key increment member。
为有序集 key 的成员 member 的 score 值加上增量 increment 。
127.0.0.1:6379[9]> flushdb
OK
127.0.0.1:6379[9]> zadd s1 1000 name
(integer) 1
127.0.0.1:6379[9]> zscore s1 name
"1000"
127.0.0.1:6379[9]> zincrby s1 100 name
"1100"
127.0.0.1:6379> set s3 100
OK
127.0.0.1:6379> zincrby s3 1 name
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度为O(log(N))。
返回值:
语法:ZRANGE key start stop [WITHSCORES]。
返回有序集 key 中,指定区间内的成员。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd s1 100 member1
(integer) 1
127.0.0.1:6379> zadd s1 200 member2
(integer) 1
127.0.0.1:6379> zrange s1 0 1 # 显示敬意0到1的成员
1) "member1"
2) "member2"
127.0.0.1:6379> zrange s1 0 5 # stop 下标超出最大下标时的情况
1) "member1"
2) "member2"
127.0.0.1:6379> zrange s1 -1 -1 # 负数情况
1) "member2"
127.0.0.1:6379> zrange s1 2 1 # start 大于 end 情况
(empty array)
127.0.0.1:6379> zrange s1 4 5 # start 大于 成员数量情况
(empty array)
127.0.0.1:6379> zrange s1 0 1 withscores # 添加withscores 选项情况
1) "member1"
2) "100"
3) "member2"
4) "200"
127.0.0.1:6379> set name cxian
OK
127.0.0.1:6379> zrange name 0 1 # 对非有序集合执行zrange命令情况
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(log(N)+M), N 为有序集的基数,而 M 为结果集的基数。
返回值:
语法:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]。
返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。
127.0.0.1:6379[9]> flushdb
OK
127.0.0.1:6379[9]> zadd s1 2500 name1
(integer) 1
127.0.0.1:6379[9]> zadd s1 5000 name2
(integer) 1
127.0.0.1:6379[9]> zadd s1 12000 name3 # 初始化有序集合
(integer) 1
127.0.0.1:6379[9]> zrangebyscore s1 -inf +inf
1) "name1"
2) "name2"
3) "name3"
127.0.0.1:6379[9]> zrangebyscore s1 -inf +inf withscores
1) "name1"
2) "2500"
3) "name2"
4) "5000"
5) "name3"
6) "12000"
127.0.0.1:6379[9]> zrangebyscore s1 -inf 3000 withscores
1) "name1"
2) "2500"
127.0.0.1:6379[9]> zrangebyscore s1 5000 +inf withscores
1) "name2"
2) "5000"
3) "name3"
4) "12000"
127.0.0.1:6379[9]> zrangebyscore s1 8000 +inf withscores
1) "name3"
2) "12000"
127.0.0.1:6379[9]> zrangebyscore s1 8000 +inf
1) "name3"
127.0.0.1:6379[9]> ZRANGEBYSCORE s1 (8000 400000
1) "name3"
时间复杂度O(log(N)+M), N 为有序集的基数, M 为被结果集的基数。
返回值:
语法:ZRANK key member。
返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd s1 5 member1
(integer) 1
127.0.0.1:6379> zadd s1 3 member2
(integer) 1
127.0.0.1:6379> zadd s1 8 member3
(integer) 1
127.0.0.1:6379> zrank s1 member1 # 对有序集执行zrank情况
(integer) 1
127.0.0.1:6379> set s2 cxian
OK
127.0.0.1:6379> zrank s3 member1 # 对不存在key情况
(nil)
127.0.0.1:6379> set s3 beijing # 初始化非有序集合
OK
127.0.0.1:6379> zrank s3 bj # 对非有序集合情况
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(log(N))。
返回值:
语法:ZREM key member [member ...]。
移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> zadd s1 5 member1
(integer) 1
127.0.0.1:6379> zadd s1 3 member2
(integer) 1
127.0.0.1:6379> zadd s1 8 member3 # 初始化有序集
(integer) 1
127.0.0.1:6379> zrem s1 member1 member2 # 成员存在情况
(integer) 2
127.0.0.1:6379> zrem s1 member5 # 成员不存在情况
(integer) 0
127.0.0.1:6379> zrem s2 member5 # key不是有序集情况,报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(M*log(N)), N 为有序集的基数, M 为被成功移除的成员的数量。
返回值:
语法:ZREMRANGEBYRANK key start stop。
移除有序集 key 中,指定排名(rank)区间内的所有成员。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set s1 1 member1
(error) ERR syntax error
127.0.0.1:6379> zadd s1 1 member1
(integer) 1
127.0.0.1:6379> zadd s1 4 member2
(integer) 1
127.0.0.1:6379> zadd s1 3 member3 # 初始化有序集
(integer) 1
127.0.0.1:6379> zremrangebyrank s1 1 1 # 有序集
(integer) 1
127.0.0.1:6379> zrange s1 0 -1 # 序出所有
1) "member1"
2) "member2"
127.0.0.1:6379> set name cxian
OK
127.0.0.1:6379> zremrangebyrank name 1 1 # 非有序集key,报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(log(N)+M), N 为有序集的基数,而 M 为被移除成员的数量。
返回值:
语法:ZREMRANGEBYSCORE key min max。
移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。
127.0.0.1:6379> zrange grade 0 -1 withscores # 查看成员信息
1) "verctor"
2) "64"
3) "lining"
4) "65"
5) "windows"
6) "68"
7) "unix"
8) "71"
127.0.0.1:6379> zremrangebyscore grade 66 90 # 移除大于等于66 小于等于99 的成员
(integer) 2
127.0.0.1:6379> zrange grade 0 -1 withscores # 查看成员信息
1) "verctor"
2) "64"
3) "lining"
4) "65"
时间复杂度O(log(N)+M), N 为有序集的基数,而 M 为被移除成员的数量。
返回值:
语法:ZREVRANGE key start stop [WITHSCORES]。
返回有序集 key 中,指定区间内的成员。
127.0.0.1:6379> zadd grade 65 lining
(integer) 1
127.0.0.1:6379> zadd grade 64 verctor
(integer) 1
127.0.0.1:6379> zadd grade 71 unix # 初始化集合
(integer) 1
127.0.0.1:6379> zrange grade 0 -1 withscores # 查看有序集信息
1) "verctor"
2) "64"
3) "lining"
4) "65"
5) "unix"
6) "71"
127.0.0.1:6379> zrevrange grade 0 -1 withscores # 执行zrevrange命令情况
1) "unix"
2) "71"
3) "lining"
4) "65"
5) "verctor"
6) "64"
127.0.0.1:6379> zrevrange name 0 -1 # 非有序集key执行zrevrange命令情况报错
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(log(N)+M), N 为有序集的基数,而 M 为结果集的基数。
返回值:
语法:ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]。
返回有序集 key 中, score 值介于 max 和 min 之间(默认包括等于 max 或 min )的所有的成员。有序集成员按 score 值递减(从大到小)的次序排列。
127.0.0.1:6379> zrange grade 0 -1 withscores # 查看有序集合信息
1) "verctor"
2) "64"
3) "lining"
4) "65"
5) "unix"
6) "71"
127.0.0.1:6379> zrevrangebyscore grade 90 60 withscores # 执行zrevrangebyscore命令
1) "unix"
2) "71"
3) "lining"
4) "65"
5) "verctor"
6) "64"
时间复杂度O(log(N)+M), N 为有序集的基数, M 为结果集的基数。
返回值:
语法:ZREVRANK key member。
返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递减(从大到小)排序。
127.0.0.1:6379> zrange grade 0 -1 # 查看集合信息
1) "verctor"
2) "lining"
3) "unix"
127.0.0.1:6379> zrevrank grade lining # 取lining的排名
(integer) 1
127.0.0.1:6379> zrevrank grade baidu # 成员不存在
(nil)
127.0.0.1:6379> get grade1
(nil)
127.0.0.1:6379> zrevrank grade1 baidu # key不存在
(nil)
127.0.0.1:6379> zrevrank name baidu # key存在且不为有序集合
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(log(N))。
返回值:
语法:ZSCORE key member。
返回有序集 key 中,成员 member 的 score 值。
127.0.0.1:6379> zrange grade 0 -1
1) "verctor"
2) "lining"
3) "unix"
127.0.0.1:6379> zscore grade lining # 取存在成员的情况
"65"
127.0.0.1:6379> zscore grade lining2 # 取不存在成员的情况
(nil)
127.0.0.1:6379> zscore grade2 lining2 # 取不存在key不存在成员的情况
(nil)
127.0.0.1:6379> set grade3 beijing
OK
127.0.0.1:6379> zscore grade3 lining2 # 取存在key不为有序集全情况
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(1)。
返回值:
语法:ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]。
计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。
127.0.0.1:6379> zrange grade 0 -1 withscores # 查看有序集成员信息
1) "verctor"
2) "64"
3) "lining"
4) "65"
5) "unix"
6) "71"
127.0.0.1:6379> zrange grade2 0 -1 withscores # 查看有序集成员信息
1) "ll"
2) "30"
3) "un"
4) "35"
5) "vc"
6) "50"
127.0.0.1:6379> zunionstore dest 2 grade grade2 weights 2 2 # 执行zunionstore
(integer) 6
127.0.0.1:6379> zrange dest 0 -1 withscores # 查看 dest 信息
1) "ll"
2) "60" # 分值已乘以2(原数据是30)
3) "un"
4) "70" # 分值已乘以2(原数据是35)
5) "vc"
6) "100" # 分值已乘以2(原数据是50)
7) "verctor"
8) "128"
9) "lining"
10) "130"
11) "unix"
12) "142"
127.0.0.1:6379> del grade3
(integer) 1
127.0.0.1:6379> zunionstore dest 3 grade grade2 grade3 # 不存在key情况
(integer) 6
127.0.0.1:6379> zadd grade 12 ll # 在grade中添加和grade2相同的成员
(integer) 1
127.0.0.1:6379> zscore dest ll # 查看dest的成员ll的分值
"42"
127.0.0.1:6379> set grade3 beiging
OK
127.0.0.1:6379> zunionstore dest 3 grade grade2 grade3 # key不是有序集合情况
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(N)+O(M log(M)), N 为给定有序集基数的总和, M 为结果集的基数。
返回值:
语法:ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]。
计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。
127.0.0.1:6379> zinterstore dest 2 grade grade2 # 取两集合交集情况
(integer) 1
127.0.0.1:6379> zrange dest 0 -1 # 查看交集成员信息
1) "ll"
127.0.0.1:6379> del grade3
(integer) 1
127.0.0.1:6379> zinterstore dest 3 grade grade2 grade3 # 有不存在的key情况
(integer) 0
127.0.0.1:6379> lpush grade3 1
(integer) 1
127.0.0.1:6379> zinterstore dest 3 grade grade2 grade3 # 不为有序集合的key情况
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(N*K)+O(M*log(M)), N 为给定 key 中基数最小的有序集, K 为给定有序集的数量, M 为结果集的基数。
返回值:
语法:ZSCAN key cursor [MATCH pattern] [COUNT count]。