我命由我,不由天!


  • 搜索
prometheus docker golang linux kubernetes

redis-quicklist

发表于 2021-06-07 | 0 | 阅读次数 341

快速列表

Redis早期版本存储list列表数据结构使用的是压缩列表ziplist和普通的双向链表linkedlist,也就是说当元素少时用ziplist,当元素多时用likedlist

考虑到链表的附加空间相对太高,prev和next指针就要占去16个字节,另外每个节点的内存都是单独分配,会加剧内存的碎片化,影响内存管理效率,后来的Redis新版本对列表数据结构进行了改造,使用quicklist代替ziplist和linkedlist

quicklist是ziplist和linkedlist的混合体,它将linkedlist按段切分,每一段使用ziplist让存储紧凑,多个ziplist之间使用双向指针串接起来

image.png
为了进一步节约空间,Redis还会对ziplist进行压缩存储,使用LZF算法压缩,可以选择压缩深度。

每个ziplist存多少元素

quicklist内部默认单个ziplist长度为8KB,超出这个字节数,就会另起一个ziplist。ziplist的长度由配置参数list-max-ziplist-size决定

压缩深度

quicklist默认的压缩深度是0,也就是不压缩。压缩的实际深度由配置参数list-compress-depth决定。为了支持快速push/pop操作,quicklist的首尾两个ziplist不压缩,此时压缩深度就是1。如果压缩深度为2,就表示quicklist的首尾第一个ziplist以及首尾第二个ziplist都不压缩。

  • 本文作者: Dante
  • 本文链接: https://gaodongfei.com/archives/redis-quicklist
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
redis-压缩列表(二十五)
redis-跳跃表
  • 文章目录
  • 站点概览
Dante

Dante

119 日志
5 分类
5 标签
RSS
Creative Commons
0%
© 2023 Dante
由 Halo 强力驱动
|
主题 - NexT.Pisces v5.1.4
沪ICP备2020033702号