清淨
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • Redis

    • 简介
    • 安装
    • Redis 配置
    • 数据类型
    • Lua 脚本
    • Java 客户端
    • 实战

      • 短信登录
      • 查询缓存
      • 缓存穿透
      • 缓存击穿
      • 缓存雪崩
      • 全局唯一 ID
      • 超卖问题
      • 一人一单
      • 分布式锁
      • Redisson
      • 异步秒杀
      • 消息队列
      • 签到(BitMap)
      • UV 统计
    • 持久化
    • 集群

      • 主从集群
      • 哨兵集群
      • 分片(Cluster)集群
    • 最佳实践

      • Key-Value 设计
      • 服务端配置
    • 底层数据结构

      • 动态字符串 SDS
      • IntSet
      • Dict
      • ZipList
      • QuickList
      • SkipList
      • RedisObject
    • 数据类型底层实现

      • String
      • List
      • Set
      • ZSet
      • Hash
    • 内存管理策略

ZipList

Dict 采用的是数组和链表的方式实现,链表在逻辑上是不连续的,所以查询效率不高,并且指针也会占用额外内存。所以,Redis 引入了 ZipList 来解决内存占用过多的问题。

ZipList 顾名思义是压缩列表,是一种特殊的 Deque,由一系列的连续内存组成,且读操作的时间复杂度是 O(n)。

20250428143718

20250428143740

20250428144417

从上面的结构中,我们可以得知,ZipList 存在连锁更新问题。一旦某个 entry 占用的空间发生了变化,那么其后面的所有 entry 可能都会被跟着修改。如下:

20250428144858

ZipList 的特征如下:

  • 压缩列表的可以看做一种连续内存空间的 Deque。
  • 列表的节点之间不是通过指针连接,而是记录上一节点和本节点长度来寻址,内存占用较低。
  • 如果列表数据过多,会导致链表过长,可能影响查询性能。
  • Ziplist 的查询时间复杂度为 O(n),list 的 LPOP/RPOP 操作时间复杂度是 O(1),牺牲查询效率以换取内存节省。存储小规模数据时,内存占用远低于链表或哈希表。
  • 新增或删除较大数据时有可能发生连锁更新问题。
想要编辑此页?
上次更新: 2025/5/11 19:09
贡献者: Junfeng Dai
←DictQuickList→
[ 纸上得来终觉浅绝知此事要躬行 ]
Copyright © 2021-present Junfeng Dai
蜀ICP备2021009537号