当前位置: 首页 > news >正文

Redis第十讲 Redis之Hash数据结构Dict-rehash扩容操作

Rehash 执行过程

字典的 rehash 操作实际上就是执行以下任务:

  • 创建一个比 ht[0]->table 更大的 ht[1]->table ;
  • 将 ht[0]->table 中的所有键值对迁移到 ht[1]->table ;
  • 将原有 ht[0] 的数据清空,并将 ht[1] 替换为新的 ht[0] ;
    经过以上步骤之后, 程序就在不改变原有键值对数据的基础上, 增大了哈希表的大小。

dict的rehash 本质就是扩容,就是将数组+链表结构中的数组扩容;
这个过程,需要开辟一个更大空间的数组,将老数组中每个非空索引的bucket,搬运到新数组;搬运完成后再释放老数组的空间。

作为例子, 以下四个小节展示了一次对哈希表进行 rehash 的完整过程。
1: 开始 rehash
这个阶段有两个事情要做:

  • 设置字典的 rehashidx 为 0 ,标识着 rehash 的开始;
  • 为 ht[1]->table 分配空间,大小至少为 ht[0]->used 的两倍;

这时的字典是这个样子:

在这里插入图片描述
2: Rehash 进行中
在这个阶段, ht[0]->table 的节点会被逐渐迁移到 ht[1]->table , 因为 rehash 是分多次进行

http://www.lryc.cn/news/56647.html

相关文章:

  • 电动力学问题中的Matlab可视化
  • 云原生周刊:编程即将终结?
  • C++ STL,resize 和 reserve 的区别
  • Java——详解ReentrantLock与AQS的关联以及AQS的数据结构和同步状态State
  • vue3+vite+ts 接入QQ登录
  • 消息队列kafka及zookeeper机制
  • 分布式 - 分布式体系架构:IT架构的演进过程
  • CSDN 周赛42期
  • Vue:初识Vue
  • linux语言学习记录
  • 面向对象编程(进阶)7:面向对象特征三:多态性
  • vue尚品汇商城项目-day04【29.加入购物车操作(难点)】
  • KubeSphere 社区双周报 | 4.8 深圳站 Meetup 火热报名中 | 2023.3.17-3.30
  • ChatGPT热炒之前 搜索引擎SEO算法已经悄然改变
  • 【Linux】Mysql之视图的基本操作
  • 《扬帆优配》西藏地震!美史上最严排放新规将出台,美股收涨
  • Python 小型项目大全 66~70
  • Barra模型因子的构建及应用系列八之Earning_Yeild因子
  • 2022蓝桥杯省赛——卡片
  • 数据结构-快速排序
  • WuThreat身份安全云-TVD每日漏洞情报-2023-04-10
  • IDEA中查看源码点击Download Sources时出现Cannot download sources的问题复现及解决
  • R+VIC模型融合实践技术应用及未来气候变化模型预测/SWAT/HSPF/HEC-HMS
  • Python 02 数据类型(04元组)
  • WMS:入库库作业流程状态定位
  • 蓝易云:Linux系统【Centos7】如何配置完整的CC攻击防护策略
  • 编解码持续升级,「硬」实力铸就视频云最优解
  • 贵金属技术分析的止损保护
  • Python 进阶指南(编程轻松进阶):三、使用 Black 工具来格式化代码
  • 计算机应用辅导大纲及真题