Redis设实 - 06 压缩列表

《Redis设计与实现 黄建宏 著》第7章
该书基于Redis2.9,即Redis3.0开发版编写

压缩列表

为节约内存而开发
由一系列特殊编码的连续内存块组成的顺序型(sequential)数据结构
可包含任意多个节点(entry),每个节点可保存一个字节数组或一个整数值

压缩列表节点

1个压缩列表节点可保存1个字节数组或1个整数值
字节数组长度有3种:
·长度小于等于63(2的6次方–1)字节的字节数组
·长度小于等于16383(2的14次方–1)字节的字节数组
·长度小于等于4294967295(2的32次方–1)字节的字节数组
整数值长度有6种:
·4位长,介于0至12间的无符号整数
·1字节长的有符号整数
·3字节长的有符号整数
·int16_t类型整数
·int32_t类型整数
·int64_t类型整数

压缩列表数据结构




压缩列表节点数据结构


previous_entry_length属性
记录前一节点长度,程序可根据当前节点的起始地址计算出前一节点起始地址
以字节为单位
长度可是1或5字节:
若前一节点长度小于254字节,则该属性长度为1字节,属性值为前一节点长度
若前一节点长度大于等于254字节,则该属性长度为5字节,其第一字节为0xFE(十进制值254),后4个字节保存前一节点长度
encoding属性
1字节、2字节或5字节长,最高位为00、01或10的是字节数组编码,该编码表示content属性保存的是字节数组,数组长度由编码除最高2位后的其他位记录

1字节长,值的最高位为11的是整数编码,该编码表示content属性保存的是整数值,整数值的类型和长度由编码除最高2位后的其他位记录

content属性
保存节点的值

连锁更新

在特殊情况下产生的连续多次空间扩展操作称“连锁更新”(cascade update)
添加、删除节点都可能会引发连锁更新
最坏复杂度为O(N平方)
尽管连锁更新复杂度较高,但真正造成性能问题的几率是很低
例:


API


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值