Redis内部数据结构quicklist详解

在本文中,我们介绍一个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;            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值