Redis内部数据结构quicklist详解

Redis的list数据类型基于quicklist实现,结合了zipList和linkedList的优势。quicklist是按段切分的zipList,通过双向指针连接。文章探讨了quicklist的基本结构、插入、查找和删除等操作,以及相关配置选项的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在本文中,我们介绍一个Redis内部数据结构——quicklist。Redis对外暴露的list数据类型,它底层实现所依赖的内部数据结构就是quicklist。

我们在讨论中还会涉及到两个Redis配置(在redis.conf中的ADVANCED CONFIG部分):

list-max-ziplist-size -2
list-compress-depth 0
我们在讨论中会详细解释这两个配置的含义。

注:本文讨论的quicklist实现基于Redis源码的3.2分支。

quicklist概述

Redis对外暴露的上层list数据类型,经常被用作队列使用。比如它支持的如下一些操作:

lpush: 在左侧(即列表头部)插入数据。
rpop: 在右侧(即列表尾部)删除数据。
rpush: 在右侧(即列表尾部)插入数据。
lpop: 在左侧(即列表头部)删除数据。
这些操作都是O(1)时间复杂度的。

一、基本结构#

quicklist 实际上是 zipList 和 linkedList 的混合体,它将 linkedList 按段切分,每一段使用 zipList 来紧凑存储,多个 zipList 之间使用双向指针串接起来。

typedef struct quicklistNode {
   
    struct quicklistNode *prev; //上一个node节点
    struct quicklistNode *next; //下一个node
    unsigned char *zl;            //保存的数据 压缩前ziplist 压缩后压缩的数据
    unsigned int sz;             /* ziplist size in bytes */
    unsigned int count 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值