试题答案

更新日期:2023-11-20

Redis通过链式哈希解决键的冲突,也就是同一个桶里面的元素使用链表保存,但当链表过长时会导致查询性能变差,所以Redis使用了两个全局哈希表,用于rehash(重新哈希)操作,增加现有的哈希桶数量,减少哈希冲突。
开始默认使用1号哈希表保存键值对数据,2号哈希表尚未分配空间,当数据越来越多时将会触发rehash操作,执行以下操作:

  • 为2号哈希表分配更大的存储空间。
  • 将1号哈希表的数据拷贝到2号哈希表中,并重新建立hash映射。
  • 释放1号哈希表的空间。

将1号哈希表的数据重新映射到2号哈希表的过程中并不是一次性的,这样会造成Redis阻塞。而是采用了渐进式rehash,每次处理客户端请求的时候,将1号哈希表的部分内容拷贝至2号哈希表中,将rehash操作分散在多次请求过程中,避免耗时阻塞。


发表评论

评论数量:0