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

标签:内存数据库

共 2 篇相关文章

IT 累计浏览 2,502

redis 数据结构综述

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

IT 累计浏览 7,088

Redis内存存储结构分析

这篇讲的是 Redis 如何在内存中巧妙组织其核心数据结构。作者深入剖析了 Redis 为不同数据类型设计的多种底层编码,例如字符串的 SDS、列表的 quicklist、哈希和集合的 ziplist/hashtable 以及有序集合的 ziplist/skiplist。 文章的核心亮点在于,它清晰地揭示了 Redis 是如何根据数据的规模和元素类型,动态、智能地选择最优的底层存储方案。这种设计并非一成不变,而是精妙地在时间效率与空间利用率之间寻求最佳平衡点。例如,当集合元素是整数且数量不多时使用 intset 以节省内存;而当数据量增大或元素类型复杂时,则无缝切换到 hashtable 以保证 O(1) 的操作性能。 通过这种从应用层编码到底层内存布局的垂直剖析,文章让读者不仅能知道 Redis “怎么用”,更能理解它“为什么这么设计”。这对于进行高性能内存优化或排查复杂内存问题的工程师来说,提供了至关重要的底层视角。