ziplist
使用场景
redis Hash与List
压缩列表的存储结构
struct ziplist<T> {
int32 zlbytes; // 整个压缩列表占用字节数
int32 zltail_offset; // 最后一个元素距离压缩列表起始位置的偏移量,用于快速定位到最后一个节点;为了支持双向遍历
int16 zllength; // 元素个数
T[] entries; // 元素内容列表,挨个挨个紧凑存储
int8 zlend; // 标志压缩列表的结束,值恒为 0xFF
}...
ziplist的结构图:
zibytes - zltail_offset - zllength - entry - entry - entry - zlend;
entry 结构图
struct entry{
int<var> prevlen; // 前一个 entry 的字节长度
int<var> encoding; // 元素类型编码
optional byte[] content; // 元素内容
}
ziplist总结
ziplist属于紧凑存储,没有冗余空间,也就意味中每次增加元素都会出发重新分配内存.
删除中间节点,会导致级联更新.
老钱: https://juejin.im/book/5afc2e5f6fb9a07a9b362527/section/5b5c95226fb9a04fa42fc3f6
网友评论