《Redis - 列表对象》
一:概述
- Redis 源码版本为3.0.0.
- OBJECT ENCODING key 查看数据底层类型实现。
二:总结
- 使用 List 时
- 控制数据大小,尽量不要写入 不要超过 list-max-ziplist-value 配置的字节数。
- 控制列表长度,尽量数量不要 不要超过 list-max-ziplist-entries 配置的个数。
- 否则会引起底层数据结构的变化导致内存耗费的增加,同时数据过大和列表元素过多,都会导致列表性能降低。
二:列表对象的底层实现
- 编码方式
- 字符串对象共有三种编码方式 ziplist(压缩列表) / linklist(双向链表)
- 编码方式的选择
- 当列表对象元素都 小于64字节(list-max-ziplist-value) / 列表数量小于512个(list-max-ziplist-entries) 则使用 ziplist 。
- 不满足条件则使用 list.
- ziplist 编码方式
- 为了节约内存而开发,由一系列的特殊编码连续内存块组成的顺序型数据结构。
- 保存流程
- 每当新的列表节点加入,则每个节点(entry)保存一个列表元素。
- 图示
-
- linklist 编码方式
- skiplist 使用双端链表实现作为底层实现。则每个节点(node)保存一个列表元素。
- 图示
-
四:编码转换
- 当 ziplist 大于64/长度大于512 则会进行编码的转换 ziplist -> linklist.
五:列表命令的实现
-