redis专题笔记 - 快速列表quicklist

数据结构

// 快速列表数据结构
struct quicklist {
	quicklistNode* head;    // 指向快速列表头结点
	quicklistNode* tail;    // 快速列表尾结点
	long count;             // 元素总数
	int node;               // ziplist节点个数
	int compressDepth;      // 快速列表的压缩深度
}

// 快速列表头结点
struct quicllistNode {
	quicklistNode* prev; // 快速列表节点之间通过双向链表的方式连接,故而prev/next分别指向一个头结点的前后节点
	quicklistNode* next; 
	ziplist* zl;  	     // 每个快速列表节点关联一个压缩列表,主要存储数据
	int32 size;          // ziplist的字节总数
	int16 count;         // ziplist中的元素数量
	int2 encoding;       // 2bit表示ziplist是原生字节数组存储,还是LZF压缩存储
}

// ziplist压缩存储时的数据结构
struct ziplist_compressed {
	int32 size;                 // 压缩后的总字节数
	byte[] compressed_data;     // 存储压缩字节
}

// ziplist 
[跳转链接](https://blog.csdn.net/qq_39679639/article/details/122248347?spm=1001.2014.3001.5502)

快速列表的存储结构如图:

在这里插入图片描述

其中:

  1. ziplist raw: 表示当前ziplist使用原生字节数组存储
  2. ziplist LZF: 表示当前ziplist使用LZF压缩之后的存储
  3. quicklist为了保证可以快速从头尾获取/插入数据,head和tail指向的ziplist默认为原生ziplist,中间的ziplist为压缩后ziplist;此时压缩深度为1
  4. ziplist的默认长度为8KB,如果一个ziplist写满,则需要新建quicklistNodeziplist

快速列表的使用

  1. 面向用户的数据结构list底层通过quicklist实现
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值