【Redis】Redis数据结构——zset 有序集合

有序集合相对于字符串、列表、哈希、集合来说会有⼀些陌⽣。它保留了集合不能有重复成员的特点,但与集合不同的是,有序集合中的每个元素都有⼀个唯⼀的浮点类型的分数(score)与之关联,着使得有序集合中的元素是可以维护有序性的,但这个有序不是⽤下标作为排序依据⽽是⽤这个分数。

在这里插入图片描述
有序集合提供了获取指定分数和元素范围查找、计算成员排名等功能,合理地利⽤有序集合,可以帮助我们在实际开发中解决很多问题。

有序集合中的元素是不能重复的,但分数允许重复。类⽐于⼀次考试之后,每个⼈⼀定有⼀个唯⼀的分数,但分数允许相同。

在这里插入图片描述

普通命令

zadd

添加或者更新指定的元素以及关联的分数到 zset 中,分数应该符合 double 类型,+inf/-inf 作为正负极限也是合法的。

ZADD 的相关选项:

  • XX:仅仅⽤于更新已经存在的元素,不会添加新元素。
  • NX:仅⽤于添加新元素,不会更新已经存在的元素。
  • CH:默认情况下,ZADD 返回的是本次添加的元素个数,但指定这个选项之后,就会还包含本次更新的元素的个数。
  • INCR:此时命令类似 ZINCRBY 的效果,将元素的分数加上指定的分数。此时只能指定⼀个元素和分数。

在这里插入图片描述

zcard

获取⼀个 zset 的基数(cardinality),即 zset 中的元素个数。

在这里插入图片描述

zcount

返回分数在 min 和 max 之间的元素个数,默认情况下,min 和 max 都是包含的,可以通过 ( 排除。

在这里插入图片描述

zrange

返回指定区间⾥的元素,分数按照升序。带上 WITHSCORES 可以把分数也返回。

在这里插入图片描述

zrevrange

返回指定区间⾥的元素,分数按照降序。带上 WITHSCORES 可以把分数也返回。

备注:这个命令可能在 6.2.0 之后废弃,并且功能合并到 ZRANGE 中。

在这里插入图片描述

zrangebyscore

返回分数在 min 和 max 之间的元素,默认情况下,min 和 max 都是包含的,可以通过 ( 排除。

备注:这个命令可能在 6.2.0 之后废弃,并且功能合并到 ZRANGE 中。

在这里插入图片描述

zpopmax

删除并返回分数最⾼的 count 个元素。

在这里插入图片描述

bzpopmax

ZPOPMAX 的阻塞版本。

在这里插入图片描述

zpopmin

删除并返回分数最低的 count 个元素。

在这里插入图片描述

bzpopmin

ZPOPMIN 的阻塞版本。

在这里插入图片描述

zrank

返回指定元素的排名,升序。

在这里插入图片描述

zrevrank

返回指定元素的排名,降序。

在这里插入图片描述

zscore

返回指定元素的分数。

在这里插入图片描述

zrem

删除指定的元素。

在这里插入图片描述

zremrangebyrank

按照排序,升序删除指定范围的元素,左闭右闭。

在这里插入图片描述

zremrangebyscore

按照分数删除指定范围的元素,左闭右闭。

在这里插入图片描述

zincrby

为指定的元素的关联分数添加指定的分数值。

在这里插入图片描述

集合间操作

在这里插入图片描述

zinterstore

求出给定有序集合中元素的交集并保存进⽬标有序集合中,在合并过程中以元素为单位进⾏合并,元素对应的分数按照不同的聚合⽅式和权重得到新的分数。

在这里插入图片描述

  • numkeys: 表示的后面有多少要合并的集合
  • weights: 表示权重, 与对应的集合相乘
  • aggregate: 表示选择何种方式选取分数, sum 表示相加, min 取最小, max 取最大
  • weights 和 aggregate 都不加的话, 默认是 权重为1, 相加.

在这里插入图片描述

zunionstore

求出给定有序集合中元素的并集并保存进⽬标有序集合中,在合并过程中以元素为单位进⾏合并,元素对应的分数按照不同的聚合⽅式和权重得到新的分数。

在这里插入图片描述
在这里插入图片描述

命令⼩结

在这里插入图片描述

内部编码

有序集合类型的内部编码有两种:

  • ziplist(压缩列表):当有序集合的元素个数⼩于 zset-max-ziplist-entries 配置(默认 128 个),同时每个元素的值都⼩于 zset-max-ziplist-value 配置(默认 64 字节)时,Redis 会⽤ ziplist 来作为有序集合的内部实现,ziplist 可以有效减少内存的使⽤。

  • skiplist(跳表):当 ziplist 条件不满⾜时,有序集合会使⽤ skiplist 作为内部实现,因为此时ziplist 的操作效率会下降。

在这里插入图片描述
在这里插入图片描述

使用场景

有序集合⽐较典型的使⽤场景就是排⾏榜系统。例如常⻅的⽹站上的热榜信息,榜单的维度可能是多⽅⾯的:按照时间、按照阅读量、按照点赞量。本例中我们使⽤点赞数这个维度,维护每天的热榜:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杰深入学习计算机

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

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

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

打赏作者

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

抵扣说明:

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

余额充值