redis源码剖析(基础数据结构篇)——ziplist

redis源码剖析(基础数据结构篇)——ziplist


    ziplist是什么东西?它又是干什么用的呢?

    简单的说,ziplist是redis实现的一个链表结构体,它的主要特点是极其的节省空间。根据它的特性,我们也能很容易的推断出,这东西主要是用来节省内存空间的。

    我们知道,redis是一个内存型数据库。这样的定位意味着redis必须尽量减少内存的使用量,以增大其处理数据的能力。仔细阅读源码,我们也会发现,redis在节省内存方面做了很大的工作,ziplist就是redis用于节省内存的一种方式。它在redis应用广泛,redis基础类型hash、list和zset的实现中都有它的身影,此外redis持久化实现也应用到了该结构体。

一、ziplist的真实内存布局

        为了节省内存,ziplist没有直接存储结构体,因为结构体有对齐的问题,会浪费一部分内存空间。另外ziplist的内存布局以bit为单位,这一点,用结构体也无法实现。

        1、ziplist整体结构

        ziplist从实质上讲,就是一个具有类似双向链表结构的字节流,它的存储空间连续,由链表头、链表体与结束标志组成。如下图所示:


图1 ziplist结构图

        zlbytes、zltail和zllen字段构成链表头,entry字段表示真正的链表节点,entry的集合就是链表体,zlend是结束标志,为固定值255。

        zlbytes字段:4字节,记录这个ziplist结构的总长度,单位是字节。

        zltail字段:4字节,记录最后一个entry的偏移地址。这个字段有点像链表中的尾指针,它可以让我们迅速的找到链表的尾部,在

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值