Redis设计与实现系列-基本数据结构-链表和压缩列表
2018-07-31 09:52
573 查看
关于《Redis设计与实现》读书笔记
链表作为一种非常友好的数据结构在很多高级编程语言中都有内置,然而C语言中没有没有链表这种数据结构,在redis中redis自行设计了一套链表数据结构用于存储链式数据,redis中设计了一个双端链表,该链表跟普通链表没什么大的区别这里就不详细描述,本文主要介绍redis中另一种链式数据结构压缩列表。
压缩列表(ziplist)是用一些列特殊的编码构成的内存区域,是redis为了节省内存而设计的,ziplist中每个节点可以保存一个长度受限的字符数组(不以
一个 ziplist 可以包含多个节点,每个节点可以划分为以下几个部分:
pre_entry_length:前一个节点的长度,有个这个值就可以直接通过指针计算直接跳到上一个节点。
encoding 和 length:encoding 和 length保存着节点字符串的类型及其长度。
content:content保存着节点的内容,长度和类型由encoding和length决定。
链表作为一种非常友好的数据结构在很多高级编程语言中都有内置,然而C语言中没有没有链表这种数据结构,在redis中redis自行设计了一套链表数据结构用于存储链式数据,redis中设计了一个双端链表,该链表跟普通链表没什么大的区别这里就不详细描述,本文主要介绍redis中另一种链式数据结构压缩列表。
压缩列表(ziplist)是用一些列特殊的编码构成的内存区域,是redis为了节省内存而设计的,ziplist中每个节点可以保存一个长度受限的字符数组(不以
\0结尾的
char数组)或者整数,redis中ziplist结果如下图所示:
area |<---- ziplist header ---->|<----------- entries ------------->|<-end->| size 4 bytes 4 bytes 2 bytes ? ? ? ? 1 byte +---------+--------+-------+--------+--------+--------+--------+-------+ component | zlbytes | zltail | zllen | entry1 | entry2 | ... | entryN | zlend | +---------+--------+-------+--------+--------+--------+--------+-------+ ^ ^ ^ address | | | ZIPLIST_ENTRY_HEAD | ZIPLIST_ENTRY_END | ZIPLIST_ENTRY_TAIL
一个 ziplist 可以包含多个节点,每个节点可以划分为以下几个部分:
area |<------------------- entry -------------------->| +------------------+----------+--------+---------+ component | pre_entry_length | encoding | length | content | +------------------+----------+--------+---------+
pre_entry_length:前一个节点的长度,有个这个值就可以直接通过指针计算直接跳到上一个节点。
encoding 和 length:encoding 和 length保存着节点字符串的类型及其长度。
content:content保存着节点的内容,长度和类型由encoding和length决定。
相关文章推荐
- Redis设计与实现系列-基本数据结构-链表和压缩列表
- Redis设计与实现系列-基本数据结构-SDC
- redis基本数据结构之压缩列表
- redis设计与实现(七)压缩列表
- 学习笔记-Redis设计与实现-压缩列表
- Redis源码学习3-基本数据结构之双向链表
- 数据结构之链表定义及基本操作实现
- redis数据结构之压缩列表
- 重温数据结构系列随笔:单链表(c#模拟实现)
- redis 笔记01 简单动态字符串、链表、字典、跳跃表、整数集合、压缩列表
- Redis内部数据结构详解之压缩链表(ziplist)
- 【C++数据结构】模版类实现双循环链表的基本操作
- 【Redis基本数据结构】跳跃表实现
- (转)java实现基本数据结构(堆,栈,链表)——推荐后面的链表扩展部分
- 算法导论第十章 基本数据结构实现(栈,队列,链表),课后题答案
- 重温数据结构系列随笔:单链表(c#模拟实现)
- 【数据结构和算法分析】单链表的基本实现
- 数据结构基础(8) --单链表的设计与实现(1)之基本操作
- [C++]数据结构:有序链表SortedChain的基本实现与操作
- 数据结构学习之单向链表的基本操作(非递归实现)