redis源码剖析 | 跳表与压缩列表剖析

本文深入剖析Redis中压缩列表和跳表的数据结构特点。压缩列表作为节省内存的数组替代,包含zlbytes、zltail、zllen等字段;跳表则通过多级索引实现高效查找,其随机层数策略平衡了内存和查询效率。Redis的Sorted Set结合哈希表和跳表,提供快速查询和范围查询功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

压缩列表,跳表的特点

a:压缩列表类似于一个数组,不同的是:压缩列表在表头有三个字段zlbytes,zltail和zllen分别表示长度,列表尾的偏移量和列表中的entry的个数,压缩列表尾部还有一个zlend,表示列表结束

 

  1. prev_len,表示前一个 entry 的长度。prev_len 有两种取值情况:1 字节或 5 字节取值 1 字节时,表示上一个 entry 的长度小于 254 字节。虽然 1 字节的值能表示的数值范围是 0 到 255,但是压缩列表中 zlend 的取值默认是 255,因此,就默认用 255 表示整个压缩列表的结束,其他表示长度的地方就不能再用 255 这个值了。所以,当上一个 entry 长度小于 254 字节时,prev_len 取值为 1 字节,否则,就取值为 5 字节
  2. len:表示自身长度,4 字节;
  3. encoding:表示编码方式,1 字节;
  4. content:保存实际数据。

b:跳表:是在链表的基础上增加了多级索引,通过索引的几次跳转,实现数据快速定位,跳表的查找复杂度就是 O(logN)。

跳表其实是一种多层的有序链表

跳表节点的数据结构:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值