字典与哈希表:渐进式rehash如何避免阻塞?

引言 你是否好奇:Redis的Hash类型如何实现O(1)的查询速度?当哈希表需要扩容时,如何避免长时间阻塞?数百万个key同时存在,Redis如何快速找到目标key? 今天我们深入Redis字典(dict)的底层实现,揭秘渐进式rehash的精妙设计。 一、为什么需要字典? 1.1 Redis的核心数据结构 Redis数据库本身就是一个巨大的字典: Redis数据库: ┌──────────────────────┐ │ key1 → value1 (String)│ │ key2 → value2 (Hash) │ │ key3 → value3 (List) │ │ ... │ │ keyN → valueN (ZSet) │ └──────────────────────┘ 所有key → redisObject的映射,都存储在字典中 字典的使用场景: 数据库键空间:整个Redis数据库(key → value) Hash类型:Hash对象的底层实现 ZSet类型:ZSet的成员 → 分数映射 过期键字典:记录key的过期时间 集群节点:记录槽位与节点的映射 1.2 性能需求 操作 时间复杂度要求 添加键值对 O(1) 查找key O(1) 删除key O(1) 扩容 不能阻塞服务 二、哈希表基础 2.1 哈希表原理 哈希表 = 数组 + 链表(或其他冲突解决方法) Key → Hash Function → Index → Value 示例: "name" → hash("name") → 12345 → 12345 % 16 = 13 → table[13] 核心优势:O(1)时间复杂度 ...

2025-01-21 · maneng

如约数科科技工作室

浙ICP备2025203501号

👀 本站总访问量 ...| 👤 访客数 ...| 📅 今日访问 ...