文章目录
- 压缩列表了解吗?
- 快速列表 quicklist 了解吗?
压缩列表了解吗?
压缩列表是 Redis 为了节约内存 而使用的一种数据结构,是由一系列特殊编码的连续内存快组成的顺序型数据结构。
一个压缩列表可以包含任意多个节点(entry),每个节点可以保存一个字节数组或者一个整数值。
压缩列表由这么几部分组成:
- zlbyttes:记录整个压缩列表占用的内存字节数
- zltail:记录压缩列表表尾节点距离压缩列表的起始地址有多少字节
- zllen:记录压缩列表包含的节点数量
- entryX:列表节点
- zlend:用于标记压缩列表的末端
快速列表 quicklist 了解吗?
Redis 早期版本存储 list 列表数据结构使用的是压缩列表 ziplist 和普通的双向链表 linkedlist,也就是说当元素少时使用 ziplist,当元素多时用 linkedlist。
但考虑到链表的附加空间相对较高,prev 和 next 指针就要占去 16 个字节(64 位操作系统占用 8 个字节),另外每个节点的内存都是单独分配,会家具内存的碎片化,影响内存管理效率。
后来 Redis 新版本(3.2)对列表数据结构进行了改造,使用 quicklist 代替了 ziplist 和 linkedlist,quicklist是综合考虑了时间效率与空间效率引入的新型数据结构。
quicklist由list和ziplist结合而成,它是一个由ziplist充当节点的双向链表。