redis 五大数结构底层分析

1.zset

压缩链表 和跳表 满足元素个数少于128个用压缩列表存储大于128个用跳表村村

redis核心其实还是用那个跳表 其实就是一个多级链表,在原始数据上建立多层索引方便我们查询,查询的时候是怎么一回事勒 当我们查看是查询一个节点的时候,我们就会从最开始一个节点遍历,然后 当前节点的权重小于我们要查找的权重,跳表就会访问该层的下一节点,当前节点权重等于我们查找权重,当时我sds如果小与我们要查找类型跳表也会到下一节点,如果两个条件不满足则会按相同流程遍历下一层

2.String

三大编码格式 整数就是int(19位) embstr 动态字符串就是sds(44字节 ) raw大于44字节的字符串根据内容大小申请不同的空间,节省资源

首先数字小于10000,redis会预分配object共享对象,大于19位就会嵌套一块连续内存(embstr ),大于44字节就创建一个objest对象(raw)。

首先当我们查看是查询一个节点的时候,我们就会从最开始一个节点遍历,直达遇到中止符,动态字符串记录长度遍历直接结束,2.内存预分配会给字符串多分配len的未使用的空间,当你要用内存的时候就会释放

hash

哈希表和 压缩表组成  默认的key个数512 值9的长度64就用压缩列表 不满足就用压缩列表

压缩列表 是一个双向链表 entry不存储指针只存储上一个节点的长度和当前节点数据和编码。 记录前一个节点长度是之能跳到上一个节点解决链表遍历慢问题

listpack 解决压缩列表连锁更新问题 是当前驱节点大于254字节的时候,后续的所有节点都要更新节点长度。entry记录编码加内容长度的和

list 

 快表和压缩链表 都是双向链表 快表每个节点存放前后节点加压缩列表指针

Set的 哈希表和intset 不同数据长度选择类型

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值