目录
语法: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]。