全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-12 8 分钟 ✍️ juanwangdev

Redis有序集合命令

有序集合(ZSet)是带分数(score)排序的集合,元素不重复,按分数排序,适合排行榜、评分系统等场景。

ZADD添加元素

基本语法

Bash
ZADD key [NX|XX] [CH] [INCR] score member [score member ...]

常用示例

Bash
# 添加单个元素
ZADD leaderboard 100 "player1"

# 添加多个元素
ZADD leaderboard 90 "player2" 85 "player3" 95 "player4"

# 仅添加新元素(NX)
ZADD leaderboard NX 80 "player5"

# 仅更新已存在元素(XX)
ZADD leaderboard XX 105 "player1"

# 返回变更元素数(CH)
ZADD leaderboard CH 100 "player1" 88 "player6"
# 返回: 2(新增或更新)

# 增加分数(INCR)
ZADD leaderboard INCR 10 "player1"
# player1分数从105变为115

NX仅新增,XX仅更新,CH返回变更数,INCR增加分数。

ZREM删除元素

基本语法

Bash
ZREM key member [member ...]

使用示例

Bash
# 删除单个元素
ZREM leaderboard "player3"

# 删除多个元素
ZREM leaderboard "player2" "player4"

ZSCORE获取分数

基本语法

Bash
ZSCORE key member

使用示例

Bash
ZSCORE leaderboard "player1"
# 返回: "115"

# 不存在的元素
ZSCORE leaderboard "notexist"
# 返回: (nil)

ZRANGE/ZREVRANGE获取范围元素

正序获取

Bash
# 按分数升序获取
ZRANGE leaderboard 0 2
# 返回: "player6", "player2", "player3"

# 获取全部元素
ZRANGE leaderboard 0 -1

# 同时返回分数
ZRANGE leaderboard 0 -1 WITHSCORES
# 返回:
# 1) "player6"
# 2) "88"
# 3) "player2"
# 4) "90"

倒序获取

Bash
# 按分数降序获取
ZREVRANGE leaderboard 0 2
# 返回: "player1", "player4", "player2"(分数最高的3个)

ZREVRANGE leaderboard 0 -1 WITHSCORES

ZRANGE升序,ZREVRANGE降序,WITHSCORES同时返回分数。

ZRANK/ZREVRANK获取排名

正序排名

Bash
# 升序排名(从0开始)
ZRANK leaderboard "player1"
# 返回: 2(第三名)

ZRANK leaderboard "notexist"
# 返回: (nil)

倒序排名

Bash
# 降序排名(从0开始)
ZREVRANK leaderboard "player1"
# 返回: 0(第一名)

ZRANK升序排名,ZREVRANK降序排名(排行榜常用)。

ZINCRBY增加分数

基本语法

Bash
ZINCRBY key increment member

使用示例

Bash
# 增加10分
ZINCRBY leaderboard 10 "player2"

# 减少分数
ZINCRBY leaderboard -5 "player1"

ZCARD获取集合大小

基本语法

Bash
ZCARD key

使用示例

Bash
ZCARD leaderboard
# 返回: 5

ZCOUNT统计分数范围

基本语法

Bash
ZCOUNT key min max

使用示例

Bash
# 统计分数在80-100之间的元素数
ZCOUNT leaderboard 80 100
# 返回: 3

# 使用-inf和+inf表示无限
ZCOUNT leaderboard 0 +inf
# 返回所有正分元素数

ZRANGEBYSCORE按分数范围获取

基本语法

Bash
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

使用示例

Bash
# 获取分数80-100之间的元素
ZRANGEBYSCORE leaderboard 80 100

# 带分数返回
ZRANGEBYSCORE leaderboard 80 100 WITHSCORES

# 分页获取
ZRANGEBYSCORE leaderboard 0 100 LIMIT 0 10

# 开区间(不含边界)
ZRANGEBYSCORE leaderboard (80 (100

# 倒序版本
ZREVRANGEBYSCORE leaderboard 100 80

(80表示不含80,(100表示不含100,开区间。

ZREMRANGEBYRANK/ZREMRANGEBYSCORE删除范围

按排名删除

Bash
# 删除排名0-2的元素
ZREMRANGEBYRANK leaderboard 0 2

按分数删除

Bash
# 删除分数低于80的元素
ZREMRANGEBYSCORE leaderboard -inf 80

# 删除分数80-100的元素
ZREMRANGEBYSCORE leaderboard 80 100

集合运算

ZUNIONSTORE并集

Bash
ZADD set1 1 "a" 2 "b"
ZADD set2 3 "a" 4 "c"

# 合并并集,分数相加
ZUNIONSTORE result 2 set1 set2
# result: a=4(1+3), b=2, c=4

# 使用权重
ZUNIONSTORE result 2 set1 set2 WEIGHTS 2 3
# 分数 = set1分数*2 + set2分数*3

# 使用聚合函数
ZUNIONSTORE result 2 set1 set2 AGGREGATE MAX
# 取最大分数而非相加

ZINTERSTORE交集

Bash
# 合并交集
ZINTERSTORE result 2 set1 set2
# result: a=4(只在两个集合都存在的元素)

# 使用聚合函数
ZINTERSTORE result 2 set1 set2 AGGREGATE MIN
# 取最小分数

ZSCAN迭代遍历

基本语法

Bash
ZSCAN key cursor [MATCH pattern] [COUNT count]

使用示例

Bash
# 遍历所有元素
ZSCAN leaderboard 0

# 匹配特定模式
ZSCAN leaderboard 0 MATCH player*

常用命令速查表

命令说明示例
ZADD添加元素ZADD k 100 m
ZREM删除元素ZREM k m
ZSCORE获取分数ZSCORE k m
ZRANGE升序范围ZRANGE k 0 -1
ZREVRANGE降序范围ZREVRANGE k 0 9
ZRANK升序排名ZRANK k m
ZREVRANK降序排名ZREVRANK k m
ZINCRBY增加分数ZINCRBY k 10 m
ZCARD元素数量ZCARD k
ZCOUNT分数范围计数ZCOUNT k 0 100
ZRANGEBYSCORE分数范围获取ZRANGEBYSCORE k 0 100
ZUNIONSTORE并集存储ZUNIONSTORE r 2 k1 k2
ZINTERSTORE交集存储ZINTERSTORE r 2 k1 k2

要点总结

  • ZADD支持NX(仅新增)、XX(仅更新)、INCR(增加分数)
  • ZRANGE升序,ZREVRANGE降序,WITHSCORES返回分数
  • ZRANK/ZREVRANK返回排名,从0开始
  • ZINCRBY增加分数,原子操作
  • ZRANGEBYSCORE按分数范围获取,(min表示开区间
  • ZUNIONSTORE/ZINTERSTORE支持WEIGHTS权重和AGGREGATE聚合
  • 有序集合适合实现排行榜、评分系统、优先队列等场景

📝 发现内容有误?点击此处直接编辑

← 上一篇 Redis字符串命令
下一篇 → Redis过期与持久化
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库