Skip to content

Zset

Zset 结构是 有序不重复 的存储多个键值对。其中有序集合的键被称为 成员 (member),值被称为 分值 (score),分值必须为浮点数。Zset 是 Redis 中唯一一个既可以根据 成员 访问,也可以根据 分值及分值的排列顺序 来访问元素的结构。

命令行为
ZADD key score member添加一个带有给定分值的成员添加到有序集合中
ZRANGE根据元素在 Zset 中所处位置,从 Zset 获取多个元素
ZRANGEBYSCORE获取 Zset 在给定分值范围内的所有元素
ZREM如果给定的成员存在 Zset 集合,那么移除该成员
ZINCRBY将键值对中指定的键的分数增加指定数值
ZSCORE输出键值对中指定键的分数
ZCARD返回 Zset 中成员数量
ZCOUNT返回介于 [min,max] 之间分值元素的数量
ZRANK返回元素在 Zset 的排名
shell
# 添加元素到 Zset 中,如果 member 存在,会返回 0,否则为 1
ZADD zset 100 first
(integer) 1

ZADD zset 200 second
(integer) 1

# 输出键为 second 的分数
ZSCORE zset second
"200"

# 查询指定 index 的元素,不包括 score
ZRANGE zset 0 -1
1) "first"
2) "second"

# 查询指定 index 的元素,包括 score
ZRANGE zset 0 -1 WITHSCORES
1) "first"
2) "100"
3) "second"
4) "200"

# 获取给定分值范围 [0,100] 内的从 0 开始的 1 个元素
ZRANGEBYSCORE zset 0 100 WITHSCORES LIMIT 0 1
1) "first"
2) "100"

# 若成员存在 Zset,那么移除该成员
ZREM zset first second
(integer) 2

# 将键为 first 的分数增加 101
ZINCRBY zset 101 first
"201"

有序集合命令

命令作用
ZREVRANK返回 Zset 中 member 的排名,按照分值从大到小排列
ZREVRANGE返回 Zset 给定范围内的成员,按照分值从大到小排列
ZRANGEBYSCORE返回有序集合中分值介于 [min,max] 的所有成员,按照分值从小到大排列
ZREVRANGEBYSCOREZRANGEBYSCORE 顺序相反,从大到小排列
ZREMRANGEBYRANK移除 排名 介于 [start,stop] 之间的所有成员
ZREMRANGEBYSCORE移除 分值 介于 [min,max] 之间的所有成员
ZINTERSTORE对于多个 Zset 进行 交集 运算
ZUNIONSTORE对于多个 Zset 进行 并集 运算

Zset 默认按照 score 升序 排序。

shell
# 定义如下 zset 集合
ZRANGE zset 0 -1 WITHSCORES
1) "n2"
2) "5"
3) "n1"
4) "10"
5) "n3"
6) "15"

# 获取 n3 的排名
ZREVRANK zset n3
(integer) 0

# 降序获取范围内元素
ZREVRANGE zset 0 -1 WITHSCORES
1) "n3"
2) "15"
3) "n1"
4) "10"
5) "n2"
6) "5"

# 返回分数在 [6,10] 内,index=0 开始的第一个元素
ZRANGEBYSCORE zset 6 10 WITHSCORES LIMIT 0 1
1) "n1"
2) "10"

# 定义两个 Zset 集合
ZRANGE zset-1 0 -1 WITHSCORES
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"

ZRANGE zset-2 0 -1 WITHSCORES
1) "d"
2) "0"
3) "c"
4) "1"
5) "b"
6) "4"

# 多个 Zset 进行交集运算,取分值最大的作为新的 key 中的 score
ZINTERSTORE zinter 2 zset-1 zset-2 AGGREGATE MAX
(integer) 2

# 多个 Zset 进行并集运算,取分值综合作为新的 key 中的 score
ZUNIONSTORE zunion 2 zset-1 zset-2 AGGREGATE SUM
(integer) 4