Redis之 Zset类型

Redis的有序集合zset是一个无重复元素的集合,每个成员关联评分用于排序。常用命令包括添加元素(zadd),获取范围(zrange),按分数排序(zrangebyscore,zrevrangebyscore),增加评分(zincrby),删除元素(zrem),计数(zcount)和获取排名(zrank)。

Redis有序集合 zset 与普通集合 set 非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分( score ),这个评分( score ) 被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了。
常用命令
1.将一个或者多个元素加入到有序集合中

zadd key score1 value1 scope2 value2...

2.返回有序集合key中,下标在n-m之间的元素

zrange key n m
//带withscores,返回值和分数
zrange key n m [withscores]

3.返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max成员有序集成员按 score 值递增(从小到大)次序排列。

zrangebyscore key min max [withscores]

4.从大到小排序

zrevrangebyscore key max min [withscores]

5.指定元素的score加上增量

zincrby key num value

6.删除指定元素

zrem key value

7.统计该集合,分数区间段的元素个数

zcount key min max 

8.返回该值在集合中的排名,从0开始

zrank key value
### Redis ZSet 类型 使用方法和功能介绍 RedisZSet(有序集合)类型是一种非常强大的数据结构,它结合了 Set 和 Hash 的特性。ZSet 中的每个成员都是唯一的,并且与一个分数(score)相关联,这个分数用于对集合中的成员进行排序[^4]。 #### 1. ZSet 的基本操作 以下是 ZSet 的一些常用命令及其功能: - **ZADD**:向 ZSet 中添加一个或多个成员,或者更新已存在成员的分数。 ```python redis> ZADD myzset 1 "one" 2 "two" ``` 上述命令将成员 `one` 和 `two` 添加到 `myzset` 中,并分别设置分数为 1 和 2[^3]。 - **ZRANGE**:返回按分数从小到大排序的成员列表。 ```python redis> ZRANGE myzset 0 -1 WITHSCORES ``` 返回从索引 0 到 -1(即所有成员)的成员及对应的分数。 - **ZREVRANGE**:返回按分数从大到小排序的成员列表。 ```python redis> ZREVRANGE myzset 0 -1 WITHSCORES ``` - **ZINCRBY**:增加指定成员的分数值。 ```python redis> ZINCRBY myzset 2 "one" ``` 将成员 `one` 的分数增加 2[^2]。 - **ZREM**:移除一个或多个成员。 ```python redis> ZREM myzset "one" ``` - **ZCARD**:返回 ZSet 中成员的数量。 ```python redis> ZCARD myzset ``` - **ZSCORE**:返回指定成员的分数。 ```python redis> ZSCORE myzset "two" ``` #### 2. ZSet 的范围操作 ZSet 支持基于分数或排名的范围查询,这使得它非常适合用于排行榜等场景。 - **ZRANGEBYSCORE**:返回指定分数范围内的成员。 ```python redis> ZRANGEBYSCORE myzset 1 2 ``` 返回分数在 1 到 2 范围内的成员[^3]。 - **ZREMRANGEBYSCORE**:删除指定分数范围内的成员。 ```python redis> ZREMRANGEBYSCORE myzset 0 1 ``` - **ZRANK** 和 **ZREVRANK**:返回成员的排名(基于分数从小到大或从大到小)。 ```python redis> ZRANK myzset "two" ``` #### 3. ZSet 的集合操作 ZSet 还支持集合运算,如交集和并集。 - **ZINTERSTORE**:计算多个 ZSet 的交集,并将结果存储到新的 ZSet 中。 ```python redis> ZINTERSTORE out 2 myzset1 myzset2 ``` - **ZUNIONSTORE**:计算多个 ZSet 的并集,并将结果存储到新的 ZSet 中。 ```python redis> ZUNIONSTORE out 2 myzset1 myzset2 ``` #### 4. ZSet 的内部实现 ZSet 的内部实现有两种编码方式:ziplist 和 skiplist+dict[^5]。 - **ziplist(压缩列表)**:当 ZSet 的成员数量较少且每个成员的值较小时,Redis 使用 ziplist 来存储 ZSet,这种方式可以节省内存[^5]。 - **skiplist(跳表)**:当 ZSet 的成员数量较多或成员值较大时,Redis 使用 skiplist 来存储 ZSet,这种方式能够保证高效的插入、删除和查询操作[^5]。 #### 5. ZSet 的应用场景 由于 ZSet 支持按分数排序的功能,它非常适合用于以下场景: - **排行榜系统**:如微博热搜、游戏天梯排行、学生成绩排行等[^5]。 - **任务队列**:根据优先级排序的任务队列。 - **地理信息**:基于距离的排序,例如附近的人功能。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微微笑再加油

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值