- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
源码6:破旧立新——探索「紧凑列
表」
Redis5.0又引入了一个新的数据结构listpack,它是对ziplist结构的改进,
在空间上会更加节省,而且结构上也比ziplist要精简。它的整体形式
和ziplist还是比较接近的,如果你认真阅读了ziplist的结构分析,那么
listpack也是比较容易理解的。
structlistpackT{
int32total_bytes;//占用的总字节数
int16size;//元素个数
T[]条目;//紧凑排列的元素列表
int8end;//同zlend一样,恒为0xFF
}
首先这个listpack跟ziplist的结构几乎一摸一样,只是少了一个
zltail_offset字段。ziplist通过这个字段来定位出最后一个元素的位
置,用于逆序遍历。不过listpack可以通过其它方式来定位出最后一个元
素的位置,所以zltail_offset字段就省掉了。
源码6:破旧⽴新——探索「紧
凑列表」
Redis5.0⼜引⼊了⼀个新的数据结构listpack,它是对ziplist结
构的改进,在空间上会更加节省,⽽且结构上也⽐ziplist要精
简。它的整体形式和ziplist还是⽐较接近的,如果你认真阅读了
ziplist的结构分析,那么listpack也是⽐较容易理解的。
structlistpackT{
int32total_bytes;//占⽤的总字节数
int16size;//元素个数
T[]entries;//紧凑排列的元素列表
int8end;//同zlend⼀样,恒为0xFF
}
⾸先这个listpack跟ziplist的结构⼏乎⼀摸⼀样,只是少了⼀
个zltail_offset字段。ziplist通过这个字段来定位出最后⼀个
元素的位置,⽤于逆序遍历。不过listpack可以通过其它⽅式来定
位出最后⼀个元素的位置,所以zltail_offset字段就省掉了。
structlpentry{
int变量编码;可选字节[]内
容;int变量长度;
}
元素的结构和ziplist的元素结构也很类似,都是包含三个字段。不同的是长
度字段放在了元素的尾部,而且的不是上一个元素的长度,是当前元素
的长度。正是因为长度放在了尾部,所以可以省去了zltail_offset字段
来标记最后一个元素的位置,这个位置可以通过total_bytes字段和最后
一个元素的长度字段计算出来。
长度字段使用varint进行编码,不同于skiplist元素长度的编码为1个字
节或者5个字节,listpack元素长度的编码可以是1、2、3、4、5个字节。
同UTF8编码一样,它通过字节的最高为是否为1来决定编码的长度。
同样,Redis为了让listpack元素支持多种类型,它对encoding字段也
进行了较为复杂的设计。
1.0xxxxxxx表示非负小整数,可以表示0~127。2.10xxxxxx表示
小字符串,长度范围是0~63,content字段为字符串的内容。3.110xxxxx
yyyyyyyy表示有符号整数,范围是‑2048~2047。4.1110xxxxyyyyyyyy
表示中等长度的字符串,长度范围是0~4095,content字段为字符串的内
容。5.aaaaaaaabbbbbbbbccccccccdddddddd表示大字
符串,节表示长度,content字段为字符串内容。6.
aaaaaaaabbbbbbbb表示2字节有符号整数。7.aaaaaaaa
bbbbbbbbcccccccc表示3字节有符号整数。
structlpentry
{intvarencoding;
optionalbyte[]content;
intvarlength;
}
元素的结构和ziplist的元素结构也很类似,都是包含三个字段。不
同的是⻓度字段放在了元素的尾部,⽽且的不是上⼀个元
您可能关注的文档
最近下载
- 京东客服客服话术和自动回复语大全.pdf VIP
- 入党志愿书(A4打印版).pdf VIP
- 入党志愿书_打印__电子版__A3A4双面.pdf VIP
- 儿童社会性发展.ppt VIP
- 2025年事业单位工勤技能-重庆-重庆环境监测工一级(高级技师)历年参考题典型考点含答案解析.docx VIP
- 2024年秋季新人教版七年级上册英语全册教案.docx
- 国际税收讲义(人民大学_朱青).ppt VIP
- 2025年事业单位工勤技能-重庆-重庆环境监测工四级(中级工)历年参考题库含答案解析.docx VIP
- 2023年重庆市环境系统事业单位人员招聘考试模拟试题及答案解析.docx VIP
- 2023年重庆市环境系统事业单位人员招聘考试题库及答案解析.docx VIP
原创力文档


文档评论(0)