Redis之quicklist源码分析
一、quicklist简介 Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。 一个列表最多可以包含 2 32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。 其底层实现所依赖的内部数据结构就是quicklist,主要特点有: 1. list是一个双向链表。 2. 在list的两端追加和删除数据极为方便,时间复杂度为O(1)。 3. list也支持在任意中间位置的存取操作,时间复杂度为O(N)。 在看源码之前(版本3.2.2),我们先看一下quicklist中的几个主要数据结构: 一个quicklist由多个quicklistNode组成,每个quicklistNode指向一个ziplist,一个ziplist包含多个entry元素,每个entry元素就是一个list的元素,示意图如下: 图1:quicklist 二、quicklist数据结构源码 下面分别看下quicklist、quicklistNode的源码(代码文件是Quicklist.h,ziplist后面文章再分析): quicklist: /* quicklist结构占用32个字节(64位系统),其中字段: head:指向第一个quicklistNode。 tail