# 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"