redis zset
1. 有序集合(string)
有序集合类型 (Sorted Set或ZSet) 相比于集合类型多了一个排序属性 score(分值),对于有序集合 ZSet 来说,每个存储元素相当于有两个值组成的,一个是有序结合的元素值,一个是排序值。有序集合保留了集合不能有重复成员的特性(分值可以重复),但不同的是,有序集合中的元素可以排序。
2. 内部实现
有序集合是由 ziplist (压缩列表) 或 skiplist (跳跃表) 组成的。
当数据比较少时,有序集合使用的是 ziplist 存储的,有序集合使用 ziplist 格式存储必须满足以下两个条件:
- 有序集合保存的元素个数要小于 128 个;
- 有序集合保存的所有元素成员的长度都必须小于 64 字节。
如果不能满足以上两个条件中的任意一个,有序集合将会使用 skiplist 结构进行存储。
3. 常用命令
| 命令 | 描述 |
|---|---|
| zadd key score1 member1 [score2 member2] | 添加集合或者更新 |
| zcard key | 获取集合数量 |
| zcount key min max | 获取集合中指定区间数量 |
| zincrby key increment member | 集合中对指定成员的数增量 increment |
| zinterstore destination numkeys key [key ...] | 批量计算交集并将结果集存储在新的集合 destination 中 |
| zlexcount key min max | 在集合中计算指定字典区间内成员数量 |
| zrange key start stop [WITHSCORES] | 通过索引区间返回元素 |
| zrangebylex key min max [LIMIT offset count] | 通过字典区间返回元素 |
| zrangebyscore key min max [WITHSCORES] [LIMIT] | 通过分数返回指定区间内的成员 |
| zrank key member | 返回指定成员的索引 |
| zrem key member [member ...] | 批量移除集合元素 |
| zremrangebylex key min max | 移除给定的区间的成员 |
| zremrangebyrank key start stop | 移除给定排名区间元素 |
| zremrangebyscore key min max | 移除给定的分数区间元素 |
| zrevrange key start stop [WITHSCORES] | 返回指定区间内的成员,通过索引,分数从高到低 |
| zrevrangebyscore key max min [WITHSCORES] | 返回有指定分数区间内的成员,分数从高到低排序 |
| zrevrank key member | 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 |
| zscore key member | 返回有序集中,成员的分数值 |
| zunionstore destination numkeys key [key ...] | 计算给定的一个或多个有序集的并集,并存储在新的 key 中 |
| zscan key cursor [MATCH pattern] [COUNT count] | 迭代有序集合中的元素 |
4. 使用场景
-
排行榜系统
如学生成绩的排名。某视频网站的用户点赞、播放排名、电商系统中商品的销量排名
-
电话号码排序
使用ZRANGEBYLEX或ZREVRANGEBYLEX可以帮助我们实现电话号码或姓名的排序

浙公网安备 33010602011771号