IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:压缩列表

共 1 篇相关文章

IT 累计浏览 2,738

深入剖析 redis 数据结构 ziplist

这篇讲的是 Redis 中为了极致节省内存而设计的压缩链表 ziplist 的实现细节。作者从 Redis 的 list 结构有两种底层实现(普通双链表和 ziplist)切入,重点剖析了后者。 ziplist 的核心巧妙之处在于,它用一段连续的内存空间模拟了双向链表的功能,从而省去了每个节点额外的前驱和后驱指针开销(每个指针8字节)。文章详细拆解了 ziplist 的整体格式以及每个 entry 的 TLV(类型-长度-值)结构,特别是通过 `prelen` 字段记录前一项的长度来实现反向遍历,通过精心设计的 `encoding` 字段对不同长度的字符串和整数进行紧凑编码。 通过分析 `ziplistFind()` 函数的源码,文章展示了 ziplist 如何进行数据查找与比较。最后,文章点明了 ziplist 在 Redis 中的实际应用场景(如 Hash 结构在数据量小时的底层存储),并解释了它的性能优势:紧凑的线性内存布局不仅节省空间,还可能更好地利用 CPU 缓存,使得在数据量较小时,其查找性能甚至可以媲美哈希表。