美文网首页
zset实现原理

zset实现原理

作者: 车邮马慢 | 来源:发表于2022-01-09 21:44 被阅读0次

引言

Redis因为其完全基于内存、性能出色,加上具备丰富的数据类型,在电商环境中深受后端开发的喜爱。其中有序集合zset就是基本数据类型之一,并且每个member都带有score(可用于排序),因此很适合在打赏日榜、近一周收益这类场景中运用。

数据结构

有序集合对象的编码可以是ziplist或者skiplist。同时满足以下条件时使用ziplist编码:

1、元素数量小于128个

2、所有member的长度都小于64字节

以上两个条件的上限值可通过zset-max-ziplist-entries和zset-max-ziplist-value来修改。

ziplist编码的有序集合使用紧挨在一起的压缩列表节点来保存,第一个节点保存member,第二个保存score。ziplist内的集合元素按score从小到大排序,score较小的排在表头位置。

skiplist编码的有序集合底层是一个命名为zset的结构体,而一个zset结构同时包含一个字典和一个跳跃表。跳跃表按score从小到大保存所有集合元素。而字典则保存着从member到score的映射,这样就可以用O(1)的复杂度来查找member对应的score值。虽然同时使用两种结构,但它们会通过指针来共享相同元素的member和score,因此不会浪费额外的内存。

skipList

相关文章

  • zset实现原理

    引言 Redis因为其完全基于内存、性能出色,加上具备丰富的数据类型,在电商环境中深受后端开发的喜爱。其中有序集合...

  • 动手实现 Redis 跳表(Go 语言)

    引言 总的来说,Redis 的 zset 实现中,选用「跳表」的主要原因如下: 原理清晰易懂,且容易实现,方便维护...

  • t_zset.c

    Redis的t_zset.c是对zset数据结构的实现。zset是由 dict 和zskiplist来实现的。 当...

  • Redis知识点整理

    1、zset实现?

  • Redis:有序集合类型zset实现原理

    和上面的集合对象相比,有序集合对象是有序的。与列表使用索引下标作为排序依据不同,有序集合为每个元素设置一个分数(s...

  • Redis3.2源码分析-跳跃表zskiplist

    跳跃表是Redis zset的底层实现之一,zset在member较多时会采用跳跃表作为底层实现,它在添加、删除、...

  • 通过redis的有序集合[zset] 实现延迟队列

    php使用redis的有序集合zset实现延迟队列 我们通过redis的有序集合zset来实现简单的延迟队列,将消...

  • redis 使用场景

    场景一、基于 zset、set 实现抽奖 场景二、基于 zset 延迟任务 场景三、基于 list 消息队列 ...

  • Redis ZSet底层实现以及ZSet实现延时队列

    将知识从定义、来源、实现、问题、优化、应用方面来系统性的回答 Zset原理 有序集合对象是有序的。与列表使用索引下...

  • 跳跃表python实践

    redis的zset常用场景:统计日活;打赏排行榜;天梯榜等zset底层基于跳跃表实现 跳跃表代码实现,练习版

网友评论

      本文标题:zset实现原理

      本文链接:https://www.haomeiwen.com/subject/klwxcrtx.html