Redis的hash结构,怎么rehash的,如果渐进式的,这些key突然都不访问了,会有什么问题?

目录

Redis Hash 的 Rehash 过程

1. Rehash 的触发条件

2. 渐进式 Rehash

3. 渐进式 Rehash 的优点

如果键突然不被访问了,会有什么问题?

1. Rehash 停滞

2. 内存浪费

3. 性能下降

解决方案

1. 强制 Rehash

2. 监控和告警

3. 优化访问模式

总结


Redis 的 Hash 结构在扩容时会进行 Rehash 操作。Redis 采用 渐进式 Rehash 策略,以避免一次性迁移大量键值对导致的性能问题。下面详细解释 Redis Hash 的 Rehash 过程,以及如果键突然不被访问时可能产生的问题。


Redis Hash 的 Rehash 过程

1. Rehash 的触发条件

当 Hash 表的负载因子(used / size)超过一定阈值时,Redis 会触发 Rehash:

  • 扩容:当负载因子大于 1 时,Redis 会将 Hash 表扩容为原来的 2 倍。

  • 缩容:当负载因子小于 0.1 时,Redis 会将 Hash 表缩小为原来的一半。


2. 渐进式 Rehash

Redis 的 Rehash 是渐进式的,分为以下步骤:

  1. 准备阶段

    • 分配一个新的 Hash 表(ht[1]),大小为当前 Hash 表(ht[0])的 2 倍。

    • 设置 Rehash 索引(rehashidx)为 0,表示 Rehash 从第 0 个桶开始。

  2. 迁移阶段

    • 每次对 Hash 表进行操作(如查找、插入、删除)时,Redis 会顺带将 ht[0] 中的一个桶(bucket)迁移到 ht[1]

    • 迁移完成后,rehashidx 递增,指向下一个待迁移的桶。

  3. 完成阶段

    • 当所有桶都迁移完成后,ht[0] 被释放,ht[1]

你可能感兴趣的:(redis,哈希算法,数据库)