Redis 的哈希表实现采用了开放寻址法中的线性探测(linear probing)来解决哈希冲突。当插入一个新元素时,如果计算出的哈希值对应的槽位已经被其他元素占用,Redis 会按照一定的规则寻找下一个可用的槽位。这个过程就称为 rehash。
以下是 Redis rehash 机制的详细工作原理:
初始化阶段:
rehash 触发:
hash_max_ziplist_entries
和 hash_max_ziplist_value
来调整。HSET
、HGET
、HDEL
等)导致哈希表中的元素数量发生变化时,也可能触发 rehash 操作。执行 rehash:
hash_table_max_size
来调整)。完成 rehash:
需要注意的是,Redis 的 rehash 机制是自动进行的,用户无需手动触发。此外,Redis 还支持在运行时动态地调整哈希表的大小,以适应不断变化的数据量和负载。