美文网首页
什么是渐进式rehash

什么是渐进式rehash

作者: StevenHD | 来源:发表于2020-10-30 15:58 被阅读0次

    一、Java中的做法

    当新添加元素的时候,元素的总个数超过了阈值的时候,会搞一个2倍大小的数组。


    阻塞态

    二、Redis中的做法

    • redis的字典底层有2个数组
    • 还有一个字段rehashidx用来控制rehash(默认是-1)

    何时发生扩容

    元素的个数和数组长度一致的时候

    什么是扩容

    扩容就是把数组2号初始化一个2倍的数组

    并且rehashidx从-1修改为0
    此时,当前字典就进入了rehash的状态

    • 之后对字典的增删改查操作都会进行一次单步的rehash

    三、现在又要进行增加一个元素

    • 单步的rehash会从当前的rehashidx开始,把数组1号的元素迁移到数组2号,迁移完一个索引后,rehashidx会加1
    • 处于rehash中的添加操作,都会把新添加的元素直接添加到数组2号中

    四、假设接下来又需要查询

    • 也会进行同样的单步rehash操作

    一直反复直到数组1号元素的个数为0,代表rehash完成
    此时,就需要把数组1号的指针替换为数组2号,再把数组2号的指针重新置为NULL,最后把rehashidx置为-1。(这样,就完成了redis字典的rehash)

    rehash后的操作
    • 接下来因为数组1号是原先的数组2号,所以用新的数组1号对外提供服务

    相关文章

      网友评论

          本文标题:什么是渐进式rehash

          本文链接:https://www.haomeiwen.com/subject/fghdvktx.html