Redis数据结构之压缩列表

目录

简介

数据结构

压缩列表的遍历

和普通的列表(链表)比较

什么时候会创建为压缩列表


简介

压缩列表(ziplist) 是列表键和哈希键的底层实现之一。当一个列表键只包含少量
列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么Redis就
会使用压缩列表来做列表键的底层实现。

Redis数据结构之压缩列表_第1张图片

 

数据结构

Redis数据结构之压缩列表_第2张图片

 

压缩列表是Redis为了节约内存而开发的,是由一系列特殊编码的连续内存块组成的顺
序型(sequential)数据结构。一个压缩列表可以包含任意多个节点(entry),每个节点可以
保存一个字节数组或者一个整数值,
每个压缩列表节点都由previous_entry_length、encoding、content三个部分组成。

Redis数据结构之压缩列表_第3张图片

 

压缩列表的遍历

压缩列表的从表尾向表头遍历操作就是使用这一原理实现的,只要我们拥有了一个指向
某个节点起始地址的指针,那么通过这个指针以及这个节点的previous_entry_length
属性,程序就可以一直向前一个节点回溯,最终到达压缩列表的表头节点。

Redis数据结构之压缩列表_第4张图片

和普通的列表(链表)比较

主要是节约内存:

因为普通链表节点的内存是随机分配的, 占用的内存是分散的, 而压缩列表使用的内存是规整的连续的, 所以在少量数据的时候可以节约一定的内存。

什么时候会使用到压缩列表

当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,那么Redis就会使用 压缩列表来做列表键的底层实现
当一个哈希键只包含少量键值对,比且每个键值对的键和值要么就是小整数值, 要么就是长度比较短的字符串,那么Redis就会使用压缩列表来做哈希键的底层实现
 

参考:

压缩列表牺牲速度来节省内存,Redis是膨胀了吗 - 吾爱源码

Redis~列表List的数据结构之 链表(LinkedList)和压缩列表(ZipList)_Listen-Y的博客-CSDN博客_redis压缩链表

《Redis设计与实现》

你可能感兴趣的:(Redis,数据结构)