Redis源码学习简记(四)ziplist与zipmap压缩编码原理与个人理解

本文探讨Redis中的ziplist和zipmap压缩数据结构,它们旨在节省内存,利用位操作实现增删改查。ziplist通过prevlen、encoding等字段存储元素,而zipmap结构更简洁,两者在内存管理上都有独特之处。
摘要由CSDN通过智能技术生成

把两个放在一起说主要是两个都是为了内存的压缩,使得将所有的东西都放在了char*的数组中。根据自定义的一些编码规则,实现增删改查的操作。里面涉及大量的位操作,自定义的decode(解码)和encoding(编码)的操作。我觉把原理与数据结构理解一下就好,具体的位操作,实现起来有点复杂。为了压缩空间,redis把几乎每一bit的空间使用了。

ziplist数据结构

其本质是一个超长的字符串。

|  zlbytes  |  zltail  |  zllen  |  .................................|  zlend  |

先介绍基本结构。

zlbytes (4字节 32位)存储所有的字节数。使用四个字节存储 即32bits 是一个uint32_t 即最大值为4294967295

zltail (4 字节  32位) 存储尾元素距离起始元素的偏移值

zllen (2字节  16位) 存储list的元素个数

zlend (1字节 0xFF 即255  ) 由于255被使用了 后面都会以254 作为一个判断标

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值