Redis | 有序集合对象

Redis的有序集合通过ziplist或skiplist编码实现。ziplist适用于小规模、短成员,而skiplist同时使用字典和跳跃表,提供快速查找和范围操作。当元素超过128个或成员长度超64字节时,会从ziplist转为skiplist编码。

        有序集合的编码可以是ziplist或者skiplist

        ziplist编码的压缩列表对象使用压编列表作为底层实现,每个集合元素使用两个紧挨在一起的压缩列表节点来保存,第一个节点保存元素的成员,而第二个元素则保存元素的分值。压缩列表内的集合元素按分值从小到大进行排序,分值较小的元素被放置在靠近表头的方向,而分值较大的元素则被放置在靠近表尾的方向。

例如:

redis> ZADD price 8.5 apple 5.0 banana 6.0 cherry
OK

如果 price键的值对象使用的是ziplist编码,那么这个值对象将会是下图所示的样子


而对象所使用的压缩列表则会是下图所示的样子

 

### Redis 有序集合(Sorted Set)常用命令及用法 #### 添加成员到有序集合 `ZADD key score member [score member ...]` 命令用于向指定键的有序集中添加一个或多个成员,或者更新已存在成员的分数。如果某个成员已经存在于该有序集中,则其旧分数会被新分数覆盖。 ```bash ZADD myzset 1 "one" ZADD myzset 2 "two" ``` 此命令允许一次性插入多条记录,并能处理复项的情况[^1]。 #### 获取成员排名 可以通过 `ZRANK key member` 和 `ZREVRANK key member` 来分别获得给定成员按升序排列的位置索引以及降序位置索引。返回值是从0开始计数;若找不到对应成员则返回nil。 ```bash ZRANK myzset "two" # 返回 1 (因为下标从0算起) ZREVRANK myzset "two" # 返回 0 ``` 这些功能对于构建排行榜非常有用,在实际应用场景中能够快速定位特定用户的名次[^2]。 #### 查询区间内的元素 利用 `ZRANGE key start stop [WITHSCORES]` 可以按照从小到大顺序取出[start,stop]之间的所有节点及其对应的权分值(可选参数),而 `ZREVRANGE key start stop [WITHSCORES]` 则相反地实现了由高至低取值的功能。 ```bash ZRANGE myzset 0 -1 WITHSCORES # 输出全部成员连同它们各自的得分 ZREVRANGE myzset 0 -1 WITHSCORES # 同上但是逆序显示 ``` 这有助于展示前几名用户或是最后几位参与者的信息列表。 #### 删除指定成员 当需要移除某些不再符合条件的对象时,可以采用 `ZREM key member [member ...]` 方法来完成这项工作。它接受单个或多于一名成员作为参数并将其彻底清除掉。 ```bash ZREM myzset "one" ``` 上述操作简单明了,便于维护动态变化的数据集。 #### 计算交集与并集 `ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]` 能够求得两个及以上不同源之间共同拥有的部分并将结果存储在一个新的目标容器里;同样地,`ZUNIONSTORE` 执行的是联合运算。值得注意的是,默认情况下普通集合中的每一条目都被视为具有单位权值即1来进行累加计算[^3]。 ```bash ZINTERSTORE out 2 zset1 zset2 WEIGHTS 2 3 AGGREGATE SUM ``` 这里展示了如何灵活运用多种聚合方式对来自不同地方的数据进行综合分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值