redis 数据结构综述
这篇讲的是 Redis 存储键值对的核心底层数据结构,从源码层面剖析了其设计与巧妙的权衡。文章从全局视角出发,逐一介绍了 dict 哈希表、可变类型的 redisObject、高效插入删除的 zset(跳表+哈希表组合)、经典的 adlist 双链表,以及为优化 CPU 缓存和内存而生的压缩列表 ziplist 和整数集合 intset 等关键结构。 不止于理论,作者更将这些结构与具体的 Redis 命令联系起来,清晰地展现了不同场景下的选择逻辑。比如,SET 命令对应最简单的 sds 或数值类型;HSET 和 LPUSH 在特定条件下会使用紧凑的 ziplist 而非链表;SADD 会根据元素是否全为整数,在 intset 和 dict 之间动态切换;而 ZADD 有序集合则综合运用了 skiplist 和 dict,或采用 ziplist,具体取决于配置阈值。 这种从底层实现到命令行为的串联分析,揭示了 Redis 在性能与内存之间精妙平衡的设计哲学。作者提到这只是系列开篇,后续将逐一深挖每个结构,值得对 Redis 内部机制感兴趣的技术人持续关注。