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

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

跳表问题
在这里插入图片描述

1. redis数据结构

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

2. zset底层数据结构:

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

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

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

4. 跳表是什么?

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

举例: 普通链表需要逐个遍历找到目标值27
在这里插入图片描述

跳表建立一级索引,每隔一个值建立一个索引,可以找到目标元素
在这里插入图片描述

或者在一级索引的基础上,建立二级索引来加快查找速度
在这里插入图片描述
时间复杂度是o(logn)

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

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

我是不想摆烂的 今天也要向佬学习码字不易,感谢您的阅读,希望对您有所帮助。关注我,完成每日算法自律打卡,学习什么时候开始都不晚!!

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

万物皆可der

感谢支持

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

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

打赏作者

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

抵扣说明:

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

余额充值