Redis Zset(有序集合)常用命令
Zset(有序集合)是Redis中一种特殊的数据结构,它与Set不同之处在于每个成员都关联了一个分数(score),可以按照分数进行排序。Zset的成员是唯一的,但分数可以重复。
1. 添加元素
zadd key score member [score member ...]
- 添加一个或多个元素到有序集合中
- 如果元素已存在,会更新其分数并重新排序
- 示例:
zadd myset 1 "user1" 2 "user2"
2. 获取集合长度
zcard key
- 获取有序集合的成员数量
- 示例:
zcard myset
3. 查看指定范围的成员
zrange key start stop [WITHSCORES]
- 按分数从小到大返回指定范围的成员
WITHSCORES
选项可同时返回成员分数- 示例:
zrange myset 0 2 WITHSCORES
4. 获取成员排名
zrank key member
- 获取成员在有序集合中的排名(从0开始)
- 示例:
zrank myset "user2"
5. 获取指定分数范围的成员数量
zcount key min max
- 获取分数在[min, max]范围内的成员数量
- 示例:
zcount myset 2 4
6. 删除成员
zrem key member [member ...]
- 删除一个或多个成员
- 示例:
zrem myset "user1"
7. 获取成员分数
zscore key member
- 获取指定成员的分数
- 示例:
zscore myset "user2"
8. 修改成员分数
zincrby key increment member
- 为指定成员的分数增加指定值(负值为减少)
- 示例:
zincrby myset 1 "user2"
9. 按分数范围获取成员
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
- 按分数范围获取成员
- 示例:
zrangebyscore myset 2 4 WITHSCORES
10. 倒序获取成员
zrevrange key start stop [WITHSCORES]
- 从高分到低分返回指定范围的成员
- 示例:
zrevrange myset 0 2 WITHSCORES
11. 按分数范围倒序获取成员
zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]
- 从高分到低分按分数范围获取成员
- 示例:
zrevrangebyscore myset 4 2 WITHSCORES
12. 按分数范围删除成员
zremrangebyscore key min max
- 删除分数在[min, max]范围内的所有成员
- 示例:
zremrangebyscore myset 1 2
13. 按排名范围删除成员
zremrangebyrank key start stop
- 删除指定排名范围内的成员
- 示例:
zremrangebyrank myset 0 2
14. 获取最小分数的成员
zpopmin key [count]
- 移除并返回有序集合中分数最小的count个成员
- 示例:
zpopmin myset 3
15. 获取最大分数的成员
zpopmax key [count]
- 移除并返回有序集合中分数最大的count个成员
- 示例:
zpopmax myset 1
Zset底层实现
当有序集合中包含的元素数量超过server.zset_max_ziplist_entries
(默认128)或元素的member长度超过server.zset_max_ziplist_value
(默认64)时,Redis会使用跳跃表(Skiplist)作为底层实现;否则使用ziplist(在Redis 7中,ziplist被替换为listpack)。
Zset的有序性使得它非常适合用于排行榜、优先级队列等场景。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 软件从业者Hort
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果