[Redis] 数据结构zset压缩列表实现和跳表实现讲解

这篇具有很好参考价值的文章主要介绍了[Redis] 数据结构zset压缩列表实现和跳表实现讲解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

😚一个不甘平凡的普通人,致力于为Golang社区和算法学习做出贡献,期待您的关注和认可,陪您一起学习打卡!!!😘😘😘
🤗专栏:算法学习
🤗专栏:Go实战
💬个人主页:个人主页

跳表问题
[Redis] 数据结构zset压缩列表实现和跳表实现讲解

1. redis数据结构

redis 有五种数据结构:string,hash,list,set,zset

2. zset底层数据结构:

压缩列表 或者 跳表 实现
压缩列表的实现底层数据结构:底层是一个数组,相对于数组多的是一个列表长度,尾部偏移量,列表元素个数和列表结束表标识,可以更好的找到列表的首部和尾部,对于中间的其他元素来说仍然需要进行遍历,所以时间复杂度是o(n)
[Redis] 数据结构zset压缩列表实现和跳表实现讲解

3. 什么时候采用压缩列表?

有序集合保存的元素数量小于128个 有序集合保存的所有元素长度小于64字节

4. 跳表是什么?

跳表是在压缩列表的基础上增加了多级索引,通过多级索引的位置进行跳转,实现了快速查找元素 跳表skiplist的寻址逻辑可以简单地概括为: 从最高层开始寻址,当前节点的next指针如果指向null的话就下降一层,next指针指向的下一个元素值如果小于查找值,就继续走,如果大于的话就调用backward后退指针找前一个元素再比较,直到找到对应的位置。

举例: 普通链表需要逐个遍历找到目标值27
[Redis] 数据结构zset压缩列表实现和跳表实现讲解

跳表建立一级索引,每隔一个值建立一个索引,可以找到目标元素
[Redis] 数据结构zset压缩列表实现和跳表实现讲解

或者在一级索引的基础上,建立二级索引来加快查找速度
[Redis] 数据结构zset压缩列表实现和跳表实现讲解
时间复杂度是o(logn)

5.在最前面我们提到redis最终并没有采用树这样的结构,其中一个原因就跟指针个数有关:

(不清楚树的数据结构也没关系,只需要知道树的指针固定有两个,左子树指针 和 右子树指针) 跳表节点的平均指针数是1.3个,而树的指针数固定为2个,指针又占用一定内存,显然跳表比树是用到更少的内存,redis是基于内存的操作,瓶颈最有可能就是内存大小和网络带宽,所以跳表比起树更节约内存一点。
[Redis] 数据结构zset压缩列表实现和跳表实现讲解

我是不想摆烂的 今天也要向佬学习码字不易,感谢您的阅读,希望对您有所帮助。关注我,完成每日算法自律打卡,学习什么时候开始都不晚!!文章来源地址https://www.toymoban.com/news/detail-448115.html

到了这里,关于[Redis] 数据结构zset压缩列表实现和跳表实现讲解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis追本溯源(二)数据结构:String、List、Hash、Set、Zset底层数据结构原理

    Redis 并没有直接用 C 语言的字符串,而是自己搞了一个 sds 的结构体来表示字符串,这个 sds 的全称是 Simple Dynamic String,翻译过来就是“简单的动态字符串”。 安全的二进制存储 资源。关于sds的扩容和缩容下面会进行详细的介绍,这里先不赘述了。 在一些情况中,我们需要

    2024年02月16日
    浏览(55)
  • Redis数据结构——快速列表quicklist、快表

    Redis中的数据结构,链表和压缩列表这两种数据结构是列表对象的底层实现方式。 当时考虑到链表的附加空间太大,节点的内存都是单独分配的,还会导致内存碎片化问题严重。 因此从Redis3.2开始,对列表的底层数据结构进行了改造,即使用 quickList代替链表list和压缩列表z

    2024年02月12日
    浏览(39)
  • 数据结构-散列表的含义与C++实现

    目录 一、散列表的概念 二、散列函数的作用 三、散列表的查找技术 1. 直接寻址表 2. 线性探测法 3. 平方探测法 4. 双散列法 四、散列表的优缺点 五、总结 散列表(Hash Table)是一种数据结构,它通过散列函数将映射到散列表中的一个位置,从而实现快速的查找、插入

    2024年02月08日
    浏览(46)
  • 【redis】redis的5种数据结构及其底层实现原理

    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(无序集合)及zset(有序集合)。 在秒杀项目里,我用过redis的Set和Hash结构: String:一个 key 对应一个字符串,string是Redis 最基本的数据类型。(字节的abase框架只实现了redis的string数据结构,导致我们如

    2024年02月09日
    浏览(75)
  • 深度剖析Redis九种数据结构实现原理,建议收藏

    Redis 是一个高性能的键值存储系统,支持多种数据结构。 包含五种基本类型 String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),和三种特殊类型 Geo(地理位置)、HyperLogLog(基数统计)、Bitmaps(位图)。 每种数据结构都是为了解决特定问题而设计

    2023年04月11日
    浏览(41)
  • [数据结构(C语言版本)上机实验]稀疏矩阵的三元组顺序表压缩存储以及转置实现(含快速转置)

    实现效果: 1、编写程序任意 输入 一个稀疏矩阵,用 三元组顺序表 压缩存储 稀疏矩阵 。 2、对稀疏矩阵进行 转置 , 输出 转置后的矩阵。 对应《数据结构(C语言版)》 第5章 数组与广义表 实验: 1、 掌握下三角矩阵的输入、输出、压缩存储算法; 2、 理解稀疏矩阵的三元

    2024年02月03日
    浏览(46)
  • 【后端那些事儿】Redis设计与实现(一) 数据结构,耐心看完你比Redis还懂Redis!

    本文章主要为了帮助读者认识Redis的数据结构,并深入了解Redis的数据结构,创作不易,希望得到大家的点赞、收藏、关注!谢谢! 1.1简单动态字符串(SDS)的定义 Redis的简单动态字符串(Simple Dynamic String,SDS)是Redis内部使用的字符串表示方式。SDS是一种可以自动扩展长度的字

    2024年01月22日
    浏览(40)
  • Redis数据结构一之对象的介绍及各版本对应实现

    本文首发于公众号:Hunter后端 原文链接:Redis数据结构一之对象的介绍及各版本对应实现 本篇笔记开始介绍 Redis 数据结构的底层实现。 当我们被问到 Redis 中有什么数据结构,或者说数据类型,我们可能会说有字符串、列表、哈希、集合、有序集合。 其实这几种数据类型在

    2024年02月04日
    浏览(42)
  • 【数据结构】矩阵的压缩存储

    5.1 普通矩阵的存储 用二维数组存储 分为行优先和列优先: 行优先:优先存放一行的数据。 列优先:优先存放一列的数据。 注意下标是从0还是1开始的! 5.2 对称矩阵的存储 对称矩阵定义 若n阶方阵中任意一个元素 a i , j a_{i,j} a i , j ​ 都有 a i , j = a j , i a_{i,j}=a_{j,i} a i , j

    2024年03月18日
    浏览(57)
  • 【数据结构】特殊矩阵的压缩存储

    🌈 自在飞花轻似梦,无边丝雨细如愁 🌈   🌟 正式开始学习数据结构啦~此专栏作为学习过程中的记录 🌟 数组是由n个相同类型的数据元素所构成的有限序列 数组和线性表的关系: 数组是线性表的推广:一维数组可以看做是一个线性表,而对于二维数组而言,可以看成是有

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包