# Sorted-set命令
# BZMPOP
# 语法
BZMPOP timeout numkeys key [key ...] <MIN | MAX> [COUNT count]
# 描述
用于从多个有序集合中移除并返回分数最高或最低的成员
# 参数
- key
一个或多个要从中弹出元素的有序集合键
- numkeys
后面跟着的键的数量
- timeout
最大阻塞时间,单位为秒。超时时间设为 0 表示无限期阻塞
- MIN | MAX
弹出得分最低或得分最高的成员
# BZPOPMAX
# 语法
BZPOPMAX key [key ...] timeout```
#### 描述
阻塞地从有序集合中移除并返回分数最高的元素
#### 参数
- **key**
一个或多个要从中弹出元素的有序集合键
- **timeout**
最大阻塞时间,单位为秒。超时时间设为 0 表示无限期阻塞
#### 示例
```bash
> DEL zset1 zset2
(integer) 0
> ZADD zset1 0 a 1 b 2 c
(integer) 3
> BZPOPMAX zset1 zset2 0
1) "zset1"
2) "c"
3) "2"
# BZPOPMIN
# 语法
BZPOPMIN key [key ...] timeout
# 描述
阻塞地从有序集合中移除并返回分数最低的元素
# 参数
- key
一个或多个要从中弹出元素的有序集合键
- timeout
最大阻塞时间,单位为秒。超时时间设为 0 表示无限期阻塞
# 示例
> DEL zset1 zset2
(integer) 0
> ZADD zset1 0 a 1 b 2 c
(integer) 3
> BZPOPMIN zset1 zset2 0
1) "zset1"
2) "a"
3) "0"
# ZADD
# 语法
ZADD key [NX | XX] [GT | LT] [CH] [INCR] score member [score member
...]
# 描述
向有序集合添加成员或更新分数
# 参数
- key
一个或多个要从中弹出元素的有序集合键
- score member
一个或多个待添加或更新的分数成员对。其中,score是一个双精度浮点数
# 示例
> ZADD
> ZADD myzset 1 "one"
(integer) 1
> ZADD myzset 1 "uno"
(integer) 1
> ZADD myzset 2 "two" 3 "three"
(integer) 2
> ZRANGE myzset 0 -1 WITHSCORES
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"
> ZADD myzset 1 "one"
(integer) 1
> ZADD myzset 1 "uno"
(integer) 1
> ZADD myzset 2 "two" 3 "three"
(integer) 2
> ZRANGE myzset 0 -1 WITHSCORES
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"
# ZCARD
# 语法
ZCARD key
# 描述
获取有序集合的成员数量
# 参数
- key
一个或多个要从中弹出元素的有序集合键
# 示例
> ZADD myzset 1 "one"
(integer) 1
> ZADD myzset 2 "two"
(integer) 1
> ZCARD myzset
(integer) 2
# ZCOUNT
# 语法
ZCOUNT key min max
# 描述
统计指定分数范围内的成员数
# 参数
- key
一个或多个要从中弹出元素的有序集合键
# 示例
> ZADD myzset 1 "one"
(integer) 1
> ZADD myzset 2 "two"
(integer) 1
> ZADD myzset 3 "three"
(integer) 1
> ZCOUNT myzset -inf +inf
(integer) 3
> ZCOUNT myzset (1 3
(integer) 2
# ZDIFF
# 语法
ZDIFF numkeys key [key ...] [WITHSCORES]
# 描述
该命令类似于 ZDIFFSTORE,但它不会存储排序后的结果集,而是直接将其返回给客户端。
# 参数
- key
一个或多个有序集合键。其结果为第一个集合中存在,但不存在于后续任何集合中的成员
- numkeys
后面跟着的键的数量
# 示例
> ZADD zset1 1 "one"
(integer) 1
> ZADD zset1 2 "two"
(integer) 1
> ZADD zset1 3 "three"
(integer) 1
> ZADD zset2 1 "one"
(integer) 1
> ZADD zset2 2 "two"
(integer) 1
> ZDIFF 2 zset1 zset2
1) "three"
> ZDIFF 2 zset1 zset2 WITHSCORES
1) "three"
2) "3"
# ZDIFFSTORE
# 语法
ZDIFFSTORE destination numkeys key [key ...]
# 描述
计算第一个有序集合与后续所有输入有序集合之间的差集,并将结果存储到目标键中
# 参数
- key
一个或多个有序集合的键
- numkeys
后面跟着的键的数量
- destination
用于存储结果有序集合的键
# 示例
> ZADD zset1 1 "one"
(integer) 1
redis> ZADD zset1 2 "two"
(integer) 1
redis> ZADD zset1 3 "three"
(integer) 1
redis> ZADD zset2 1 "one"
(integer) 1
redis> ZADD zset2 2 "two"
(integer) 1
redis> ZDIFFSTORE out 2 zset1 zset2
(integer) 1
redis> ZRANGE out 0 -1 WITHSCORES
1) "three"
2) "3"
# ZINCRBY
# 语法
ZINCRBY key increment member
# 描述
增加有序集合中成员的分数
# 参数
- increment
需要加到会员当前积分上的数值
- member
待增加积分的会员。若该会员不存在,则以其增加量作为初始积分并自动创建
- key
一个或多个要从中弹出元素的有序集合键
# 示例
> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZINCRBY myzset 2 "one"
"3"
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "two"
2) "2"
3) "one"
4) "3"
# ZINTER
# 语法
ZINTER numkeys key [key ...] [WEIGHTS weight [weight ...]]
[AGGREGATE <SUM | MIN | MAX | COUNT>] [WITHSCORES]
# 描述
返回多个有序集合的交集
# 参数
- key
一个或多个要从中弹出元素的有序集合键
- numkeys
后面跟着的键的数量
# 示例
> ZADD zset1 1 "one"
(integer) 1
> ZADD zset1 2 "two"
(integer) 1
> ZADD zset2 1 "one"
(integer) 1
> ZADD zset2 2 "two"
(integer) 1
> ZADD zset2 3 "three"
(integer) 1
> ZINTER 2 zset1 zset2
1) "one"
2) "two"
> ZINTER 2 zset1 zset2 WITHSCORES
1) "one"
2) "2"
3) "two"
4) "4"
# ZINTERCARD
# 语法
ZINTERCARD numkeys key [key ...] [LIMIT limit]
# 描述
这个命令与 ZINTER 类似,但它不会返回结果集,而是只返回结果的基数
# 参数
- key
一个或多个要从中弹出元素的有序集合键
- numkeys
后面跟着的键的数量
# 示例
> ZADD zset1 1 "one"
(integer) 1
> ZADD zset1 2 "two"
(integer) 1
> ZADD zset2 1 "one"
(integer) 1
> ZADD zset2 2 "two"
(integer) 1
> ZADD zset2 3 "three"
(integer) 1
> ZINTER 2 zset1 zset2
1) "one"
2) "two"
> ZINTERCARD 2 zset1 zset2
(integer) 2
> ZINTERCARD 2 zset1 zset2 LIMIT 1
(integer) 1
# ZINTERSTORE
# 语法
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight
[weight ...]] [AGGREGATE <SUM | MIN | MAX | COUNT>]
# 描述
计算交集并存储到新有序集合
# 参数
- key
一个或多个要从中弹出元素的有序集合键
- numkeys
后面跟着的键的数量
- destination
用于存储结果有序集合的键
# 示例
> ZADD zset1 1 "one"
(integer) 1
> ZADD zset1 2 "two"
(integer) 1
> ZADD zset2 1 "one"
(integer) 1
> ZADD zset2 2 "two"
(integer) 1
> ZADD zset2 3 "three"
(integer) 1
> ZINTERSTORE out 2 zset1 zset2 WEIGHTS 2 3
(integer) 2
> ZRANGE out 0 -1 WITHSCORES
1) "one"
2) "5"
3) "two"
4) "10"
# ZLEXCOUNT
# 语法
ZLEXCOUNT key min max
# 描述
统计指定字典区间内的成员数
# 参数
- key
一个或多个要从中弹出元素的有序集合键
# 示例
> ZADD myzset 0 a 0 b 0 c 0 d 0 e
(integer) 5
> ZADD myzset 0 f 0 g
(integer) 2
> ZLEXCOUNT myzset - +
(integer) 7
> ZLEXCOUNT myzset [b [f
(integer) 5
# ZMPOP
# 语法
ZMPOP numkeys key [key ...] <MIN | MAX> [COUNT count]
# 描述
从提供的键名列表中,找到第一个非空的有序集合,并从中弹出一个或多个元素
# 参数
- key
一个或多个要从中弹出元素的有序集合键
- numkeys
后面跟着的键的数量
- MIN | MAX
弹出分数最低(MIN)或分数最高(MAX)的成员
# 示例
> ZMPOP 1 notsuchkey MIN
(nil)
> ZADD myzset 1 "one" 2 "two" 3 "three"
(integer) 3
> ZMPOP 1 myzset MIN
1) "myzset"
2) 1) 1) "one"
2) "1"
> ZRANGE myzset 0 -1 WITHSCORES
1) "two"
2) "2"
3) "three"
4) "3"
> ZMPOP 1 myzset MAX COUNT 10
1) "myzset"
2) 1) 1) "three"
2) "3"
2) 1) "two"
2) "2"
> ZADD myzset2 4 "four" 5 "five" 6 "six"
(integer) 3
> ZMPOP 2 myzset myzset2 MIN COUNT 10
1) "myzset2"
2) 1) 1) "four"
2) "4"
2) 1) "five"
2) "5"
3) 1) "six"
2) "6"
> ZRANGE myzset 0 -1 WITHSCORES
(empty array)
> ZMPOP 2 myzset myzset2 MAX COUNT 10
(nil)
> ZRANGE myzset2 0 -1 WITHSCORES
(empty array)
> EXISTS myzset myzset2
(integer) 0
# ZMSCORE
# 语法
ZMSCORE key member [member ...]
# 描述
获取多个成员的分数
# 参数
- key
保存有序集合的键名
- member
一个或多个需要返回其分数的成员
# 示例
> ZADD myzset 1 "one"
(integer) 1
> ZADD myzset 2 "two"
(integer) 1
> ZMSCORE myzset "one" "two" "nofield"
1) "1"
2) "2"
3) (nil)
# ZPOPMAX
# 语法
ZPOPMAX key [count]
# 描述
移除并返回分数最高的成员
# 参数
- key
保存有序集合的键名
- count
要弹出的数量。如果不指定,默认只弹出一个
# 示例
> ZADD myzset 1 "one"
(integer) 1
> ZADD myzset 2 "two"
(integer) 1
> ZADD myzset 3 "three"
(integer) 1
> ZPOPMAX myzset
1) "three"
2) "3"
# ZPOPMIN
# 语法
ZPOPMIN key [count]
# 描述
移除并返回分数最低的成员
# 参数
- key
保存有序集合的键名
- count
要弹出的数量。如果不指定,默认只弹出一个
# 示例
> ZADD myzset 1 "one"
(integer) 1
> ZADD myzset 2 "two"
(integer) 1
> ZADD myzset 3 "three"
(integer) 1
> ZPOPMIN myzset
1) "one"
2) "1"
# ZRANDMEMBER
# 语法
ZRANDMEMBER key [count [WITHSCORES]]
# 描述
当仅传入 key 参数进行调用时,返回存储在 key 处的有序集合中的一个随机元素
# 参数
- key
保存有序集合的键名
# 示例
> ZADD dadi 1 uno 2 due 3 tre 4 quattro 5 cinque 6 sei
(integer) 6
> ZRANDMEMBER dadi
"due"
> ZRANDMEMBER dadi
"cinque"
> ZRANDMEMBER dadi -5 WITHSCORES
1) "due"
2) "2"
3) "uno"
4) "1"
5) "cinque"
6) "5"
7) "sei"
8) "6"
9) "sei"
10) "6"
# ZRANGE
# 语法
ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count]
[WITHSCORES]
# 描述
按索引返回指定范围的成员
# 参数
- key
保存有序集合的键名
- start
范围的起始位置。默认情况下为基于零的索引
- stop
范围的终点。其解析方式与起点相同
# 示例
> ZADD myzset 1 "one" 2 "two" 3 "three"
(integer) 3
> ZRANGE myzset 0 -1
1) "one"
2) "two"
3) "three"
> ZRANGE myzset 2 3
1) "three"
> ZRANGE myzset -2 -1
1) "two"
2) "three"
> ZADD myzset 1 "one" 2 "two" 3 "three"
(integer) 3
> ZRANGE myzset 0 1 WITHSCORES
1) "one"
2) "1"
3) "two"
4) "2"
> ZADD myzset 1 "one" 2 "two" 3 "three"
(integer) 3
> ZRANGE myzset (1 +inf BYSCORE LIMIT 1 1
1) "three"
> ZADD myzset 1 "one" 2 "two" 3 "three"
(integer) 3
> ZRANGE myzset 0 -1
1) "one"
2) "two"
3) "three"
> ZRANGE myzset 2 3
1) "three"
> ZRANGE myzset -2 -1
1) "two"
2) "three"
# ZRANGEBYLEX
# 语法
ZRANGEBYLEX key min max [LIMIT offset count]
# 描述
按字典范围返回成员
# 参数
- key
保存有序集合的键名
- min
按字典序比较的最小成员
- max
按字典序比较的最大成员
# 示例
> ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g
(integer) 7
> ZRANGEBYLEX myzset - [c
1) "a"
2) "b"
3) "c"
> ZRANGEBYLEX myzset - (c
1) "a"
2) "b"
> ZRANGEBYLEX myzset [aaa (g
1) "b"
2) "c"
3) "d"
4) "e"
5) "f"
# ZRANGEBYSCORE
# 语法
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
# 描述
按分数范围返回成员
# 参数
- key
保存有序集合的键名
- min
按字典序比较的最小成员
- max
按字典序比较的最大成员
# 示例
> ZADD myzset 1 "one"
(integer) 1
> ZADD myzset 2 "two"
(integer) 1
> ZADD myzset 3 "three"
(integer) 1
> ZRANGEBYSCORE myzset -inf +inf
1) "one"
2) "two"
3) "three"
> ZRANGEBYSCORE myzset 1 2
1) "one"
2) "two"
> ZRANGEBYSCORE myzset (1 2
1) "two"
> ZRANGEBYSCORE myzset (1 (2
(empty array)
# ZRANGESTORE
# 语法
ZRANGESTORE dst src min max [BYSCORE | BYLEX] [REV] [LIMIT offset
count]
# 描述
这个命令和 ZRANGE 类似,不过它会把结果存到
# 参数
- dst
用于存储结果有序集合的键
- sic
作为数据源的有序集合键
# 示例
> ZADD srczset 1 "one" 2 "two" 3 "three" 4 "four"
(integer) 4
> ZRANGESTORE dstzset srczset 2 -1
(integer) 2
> ZRANGE dstzset 0 -1
1) "three"
2) "four"
# ZRANK
# 语法
ZRANK key member [WITHSCORE]
# 描述
获取成员在有序集合中的排名
# 参数
- key
保存有序集合的键名
- member
要返回其排名的成员
# 示例
> > ZADD myzset 1 "one"
(integer) 1
> ZADD myzset 2 "two"
(integer) 1
> ZADD myzset 3 "three"
(integer) 1
> ZRANK myzset "three"
(integer) 2
> ZRANK myzset "four"
(nil)
> ZRANK myzset "three" WITHSCORE
1) (integer) 2
2) "3"
> ZRANK myzset "four" WITHSCORE
(nil)
# ZREM
# 语法
ZREM key member [member ...]
# 描述
移除有序集合中的一个或多个成员
# 参数
- key
保存有序集合的键名
- member
从有序集合中移除的一个或多个成员
# 示例
> ZADD myzset 1 "one"
(integer) 1
> ZADD myzset 2 "two"
(integer) 1
> ZADD myzset 3 "three"
(integer) 1
> ZREM myzset "two"
(integer) 1
> ZRANGE myzset 0 -1 WITHSCORES
1) "one"
2) "1"
3) "three"
4) "3"
# ZREMRANGEBYLEX
# 语法
ZREMRANGEBYLEX key min max
# 描述
移除指定字典区间内的成员
# 参数
- key
保存有序集合的键名
- min
按字典序比较的最小成员
- max
按字典序比较的最大成员
# 示例
> ZADD myzset 0 aaaa 0 b 0 c 0 d 0 e
(integer) 5
> ZADD myzset 0 foo 0 zap 0 zip 0 ALPHA 0 alpha
(integer) 5
> ZRANGE myzset 0 -1
1) "ALPHA"
2) "aaaa"
3) "alpha"
4) "b"
5) "c"
6) "d"
7) "e"
8) "foo"
9) "zap"
10) "zip"
> ZREMRANGEBYLEX myzset [alpha [omega
(integer) 6
> ZRANGE myzset 0 -1
1) "ALPHA"
2) "aaaa"
3) "zap"
4) "zip"
# ZREMRANGEBYRANK
# 语法
ZREMRANGEBYRANK key start stop
# 描述
移除指定排名范围内的成员
# 参数
- start
从 0 开始计数。如果传入负数,则从有序集合的末尾开始往前计算。
- stop
从 0 开始计数。如果传入负数,则从有序集合的末尾开始往前计算。
- key
保存有序集合的键名
# 示例
> ZADD myzset 1 "one"
(integer) 1
> ZADD myzset 2 "two"
(integer) 1
> ZADD myzset 3 "three"
(integer) 1
> ZREMRANGEBYRANK myzset 0 1
(integer) 2
> ZRANGE myzset 0 -1 WITHSCORES
1) "three"
2) "3"
# ZREMRANGEBYSCORE
# 语法
ZREMRANGEBYSCORE key min max
# 描述
移除指定分数范围内的成员
# 参数
- key
保存有序集合的键名
- min
按字典序比较的最小成员
- max
按字典序比较的最大成员
# 示例
> ZADD myzset 1 "one"
(integer) 1
> ZADD myzset 2 "two"
(integer) 1
> ZADD myzset 3 "three"
(integer) 1
> ZREMRANGEBYSCORE myzset -inf (2
(integer) 1
> ZRANGE myzset 0 -1 WITHSCORES
1) "two"
2) "2"
3) "three"
4) "3"
# ZREVRANGE
# 语法
ZREVRANGE key start stop [WITHSCORES]
# 描述
按索引倒序返回指定范围的成员
# 参数
- key
保存有序集合的键名
- start
从 0 开始计数。如果传入负数,则从有序集合的末尾开始往前计算。
- stop
从 0 开始计数。如果传入负数,则从有序集合的末尾开始往前计算。
# 示例
> ZADD myzset 1 "one"
(integer) 1
> ZADD myzset 2 "two"
(integer) 1
> ZADD myzset 3 "three"
(integer) 1
> ZREVRANGE myzset 0 -1
1) "three"
2) "two"
3) "one"
> ZREVRANGE myzset 2 3
1) "one"
> ZREVRANGE myzset -2 -1
1) "two"
2) "one"
# ZREVRANGEBYLEX
# 语法
ZREVRANGEBYLEX key max min [LIMIT offset count]
# 描述
按字典范围倒序返回成员
# 参数
- key
保存有序集合的键名
- min
按字典序比较的最小成员
- max
按字典序比较的最大成员
# 示例
> ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g
(integer) 7
> ZREVRANGEBYLEX myzset [c -
1) "c"
2) "b"
3) "a"
> ZREVRANGEBYLEX myzset (c -
1) "b"
2) "a"
> ZREVRANGEBYLEX myzset (g [aaa
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
# ZREVRANGEBYSCORE
# 语法
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
# 描述
按分数范围倒序返回成员
# 参数
- key
保存有序集合的键名
- min
按字典序比较的最小成员
- max
按字典序比较的最大成员
# 示例
> ZADD myzset 1 "one"
(integer) 1
> ZADD myzset 2 "two"
(integer) 1
> ZADD myzset 3 "three"
(integer) 1
> ZREVRANGEBYSCORE myzset +inf -inf
1) "three"
2) "two"
3) "one"
> ZREVRANGEBYSCORE myzset 2 1
1) "two"
2) "one"
> ZREVRANGEBYSCORE myzset 2 (1
1) "two"
> ZREVRANGEBYSCORE myzset (2 (1
(empty array)
# ZREVRANK
# 语法
ZREVRANK key member [WITHSCORE]
# 描述
获取成员的倒序排名
# 参数
- key
保存有序集合的键名
- member
需要获取排名的成员
# 示例
> ZADD myzset 1 "one"
(integer) 1
> ZADD myzset 2 "two"
(integer) 1
> ZADD myzset 3 "three"
(integer) 1
> ZREVRANK myzset "one"
(integer) 2
> ZREVRANK myzset "four"
(nil)
> ZREVRANK myzset "three" WITHSCORE
1) (integer) 0
2) "3"
> ZREVRANK myzset "four" WITHSCORE
(nil)
# ZSCAN
# 语法
ZSCAN key cursor [MATCH pattern] [COUNT count]```
#### 描述
增量遍历有序集合的成员和分数
#### 参数
- **cursor**
游标的值。首次迭代时传入 0,之后将每次调用返回的游标值作为下一次调用的参数
- **key**
保存有序集合的键名
---
## ZSCORE
#### 语法
```bash
ZSCORE key member
#### 描述
获取成员的分数
#### 参数
- **key**
保存有序集合的键名
- **member**
需要获取排名的成员
#### 示例
```bash
> ZADD myzset 1 "one"
(integer) 1
> ZSCORE myzset "one"
"1"
# ZUNION
# 语法
ZUNION numkeys key [key ...] [WEIGHTS weight [weight ...]]
[AGGREGATE <SUM | MIN | MAX | COUNT>] [WITHSCORES]
# 描述
返回多个有序集合的并集
# 参数
- key
一个或多个要从中弹出元素的有序集合键
- numkeys
后面跟着的键的数量
# 示例
> ZADD zset1 1 "one"
(integer) 1
> ZADD zset1 2 "two"
(integer) 1
> ZADD zset2 1 "one"
(integer) 1
> ZADD zset2 2 "two"
(integer) 1
> ZADD zset2 3 "three"
(integer) 1
> ZUNION 2 zset1 zset2
1) "one"
2) "three"
3) "two"
> ZUNION 2 zset1 zset2 WITHSCORES
1) "one"
2) "2"
3) "three"
4) "3"
5) "two"
6) "4"
# ZUNIONSTORE
# 语法
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight
[weight ...]] [AGGREGATE <SUM | MIN | MAX | COUNT>]
# 描述
计算并集并存储到新有序集合
# 参数
- destination
用于存储结果有序集合的键
- numkeys
后面跟着的键的数量
- key
一个或多个要从中弹出元素的有序集合键
# 示例
> ZADD zset1 1 "one"
(integer) 1
> ZADD zset1 2 "two"
(integer) 1
> ZADD zset2 1 "one"
(integer) 1
> ZADD zset2 2 "two"
(integer) 1
> ZADD zset2 3 "three"
(integer) 1
> ZUNIONSTORE out 2 zset1 zset2 WEIGHTS 2 3
(integer) 3
> ZRANGE out 0 -1 WITHSCORES
1) "one"
2) "5"
3) "three"
4) "9"
5) "two"
6) "10"