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聚合
- 有序集合适合实现排行榜、评分系统、优先队列等场景
📝 发现内容有误?点击此处直接编辑