redis zset怎么使用

redis zset怎么使用
最新回答
抹不掉的痛

2026-10-22 15:00:55

Redis 有序集合(ZSet)是一种按分数排序的元素集合,适用于排行榜、优先级队列等场景。以下是其核心用法及示例:

1. 创建 ZSet 并添加成员

使用 ZADD 命令创建有序集合并添加成员(可一次添加多个):

ZADD leaderboard 100 "Alice" 200 "Bob" 300 "Charlie"
  • 参数说明:

    leaderboard:集合名称

    100/200/300:成员分数(按升序排序)

    "Alice"/"Bob"/"Charlie":成员名称

2. 获取成员分数

使用 ZSCORE 查询成员的分数:

ZSCORE leaderboard "Bob" # 返回 200
  • 若成员不存在,返回 nil。
3. 获取成员排名
  • 升序排名(从 0 开始):ZRANK leaderboard "Charlie" # 返回 2(第三名)
  • 降序排名(从 0 开始):ZREVRANK leaderboard "Alice" # 返回 2(倒数第三)
4. 获取排名范围的成员
  • 按升序获取成员(可选显示分数):ZRANGE leaderboard 0 1 WITHSCORES # 返回 ["Alice", "100", "Bob", "200"]
  • 按降序获取成员:ZREVRANGE leaderboard 0 1 # 返回 ["Charlie", "Bob"]
5. 删除成员

使用 ZREM 删除指定成员:

ZREM leaderboard "Alice" # 删除 "Alice"6. 获取集合元素个数

使用 ZCARD 统计成员总数:

ZCARD leaderboard # 返回 2(删除 "Alice" 后)7. 获取分数范围内的成员个数

统计分数在 [min, max] 范围内的成员数量:

ZCOUNT leaderboard 150 250 # 返回 1(仅 "Bob" 符合)8. 其他实用操作
  • 按分数范围获取成员(升序):ZRANGEBYSCORE leaderboard 100 250 WITHSCORES # 返回 ["Bob", "200"]
  • 增加成员分数:ZINCRBY leaderboard 50 "Bob" # "Bob" 的分数变为 250
典型应用场景
  • 排行榜:按分数实时更新排名(如游戏积分)。
  • 优先级队列:根据分数处理任务顺序。
  • 范围查询:快速获取分数区间内的数据(如销量统计)。

通过以上命令,ZSet 可高效实现排序、范围查询和动态更新,适合需要高性能排序的场景。