美文网首页
什么是渐进式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

    一、Java中的做法 当新添加元素的时候,元素的总个数超过了阈值的时候,会搞一个2倍大小的数组。 二、Redis中...

  • Redis笔记

    Redis核心技术与实战 rehash·装载因子(entry个数 除以 hash桶个数) 渐进式rehash·每处...

  • redis笔记

    数据结构 SDS 字典 index确定 渐进式rehash 为了缓解一次性rehash带来的性能问题,redis提...

  • Redis字典的渐进式rehash

    采用渐进式 rehash 的原因 扩展或收缩哈希表需要将ht[0]中的所有键值对rehash到ht[1]中。不过,...

  • java 从零开始手写redis(15)实现自己的 HashMa

    回顾 我们在 从零手写缓存框架(14)redis渐进式rehash详解[https://houbb.github....

  • Redis中渐进式rehash

    Redis一共支持5种数据结构,hash是其中的一种,在hash扩容的时候采用的是渐进式rehash的方式。要想深...

  • redis

    1.Redis与Memorycache的区别? 2.Redis的五种数据结构? 3.渐进式rehash过程? 4....

  • 2. 浅析Redis底层数据结构

    概要1)Redis中的字符串-sds2)Redis中的HashMap-dict3)dict的渐进式rehash4)...

  • Redis的渐进式ReHash实现

    The Implication of Incremental Rehashing in Redis 本文适合Jav...

  • 思考题

    1.java hashMap和redis map的rehash有什么区别? Java hashMap rehash...

网友评论

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

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