文章目录
- 常用命令
- zadd
- zcard & zcount
- zrange & zrevrange
- zpopmax & bzpopmax
- zpopmin & bzpopmin
- zrank & zrevrank
- zscore & zrem
- zremrangebyrank & zremrangebyscore
- zincrby
- 多个集合间的交互命令
- 交集 & zinterstore
- 并集 & sunionstore
- 内部编码
Zset 保留了 set 不能有重复元素的特点,但是它每个元素都有一个唯一的浮点类型的分数与之关联。也就是因为这样 Zset 就可以维护有序性。
常用命令
zadd
ZADD key [NX | XX] [GT | LT] [CH] [INCR] score member [score member ...]
zadd 的这几个和 string 相同的选项类似。
- NX:仅用于添加新元素,不会更新已经存在的元素
- XX:仅用于更新已经存在的元素,不会添加新元素
- CH:加了这个选项,sadd 的返回值就不只是新增的元素个数,还包括了更新的个数
- INCR:为指定元素加上指定的分数,加了这个选项就只能指定一个元素和分数了
zcard & zcount
zcard:返回 zset 内的元素个数
zcount:返回在指定最小分数和最大分数之间的元素个数
zrange & zrevrange
zrange:返回指定区间⾥的元素,分数按照升序。带上 WITHSCORES 可以把分数也返回。
zrevrange:返回指定区间⾥的元素,分数按照降序。带上 WITHSCORES 可以把分数也返回。
zpopmax & bzpopmax
这两都是取出指定数量个最大分数的元素,bzpopmax 为阻塞版本
zpopmin & bzpopmin
与上述的最大分数一样
zrank & zrevrank
这两都是返回指定元素在 zset 中的排名,zrank 是按照升序,zrevrank 是按照降序。
zscore & zrem
zscore:返回指定元素的分数
zrem:删除指定元素
zremrangebyrank & zremrangebyscore
zremrangebyrank:按照升序删除指定范围内的元素,左闭右闭
zremrangebyscore:删除指定分数范围内的元素,左闭右闭
zincrby
为指定元素的分数加上指定的分数
多个集合间的交互命令
交集 & zinterstore
求出给定有序集合中元素的交集并保存进⽬标有序集合中,在合并过程中以元素为单位进⾏合并,元素对应的分数按照不同的聚合⽅式和权重得到新的分数。
并集 & sunionstore
求出给定有序集合中元素的并集并保存进⽬标有序集合中,在合并过程中以元素为单位进⾏合并,元素对应的分数按照不同的聚合⽅式和权重得到新的分数。
内部编码
有序集合的内部编码有两种:
- 当有序集合的元素个数⼩于 zset-max-ziplist-entries 配置(默认 128 个),同时每个元素的值都⼩于 zset-max-ziplist-value 配置(默认 64 字节)时。Redis 会⽤ ziplist 来作为有序集合的内部实现减少内存消耗
- 当上述不满足时,redis 会选择使用 skiplist 实现