Redis 7.4 版本中,ziplist 被 listpack 替代,优化了小集合的内存编码。quicklist 用于处理大列表,通过多个 listpack 节点提高效率。intset 用于小整数集合,超限后升级为 listpack 或哈希表,升级阈值可配置,主要目标是节省内存。
本文介绍Redis五种基本数据类型及其底层实现:String支持int、embstr、raw编码,底层采用SDS动态字符串,可O(1)获取长度并支持二进制安全;List在3.2版本后使用quicklist,兼顾ziplist与linkedlist的优点;Set使用intset或hashtable,整数集合支持升级;Sorted Set使用ziplist或skiplist加dict,实现排序与快速查找;Hash使用ziplist或hashtable存储对象。理解这些结构有助于按场景选择合适的类型。
《Redis源码阅读:list实现(ziplist, quicklist)》如果我们用Redis做过broker,就知道,绝大部分的队列实现,都是基于 `LPUSH` 和 `BRPOP` 这两个命令的。那么,Redis到底是怎么实现list的呢?底层是如何实现的,是否省内存,Redis为了省内存又做了什么优化?阻塞版的pop又是怎么实现的?这篇文章里,我们就会探讨这些问题...
何为quicklist,上次说到ziplist每次变更的时间复杂度都非常高,因为必须要重新生成一个新的ziplist来作为更新后的list,如果一个list非常大且更新频繁,那就会给redis带来非常大的负担。如何既保留ziplist的空间... Redis源码剖析之快速列表(quicklist)最先出现在XINDOO。
完成下面两步后,将自动完成登录并继续当前操作。