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

news/2025/2/6 4:03:49/

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.ppmy.cn/news/37978.html

相关文章

第十二届蓝桥杯省赛第二场 C/C++ B组 编程题与详解

文章目录 一、特殊年份 1、1 题目描述 1、2 题解关键思路与解答 二、小平方 2、1 题目描述 2、2 题解关键思路与解答 三、完全平方数 3、1 题目描述 3、2 题解关键思路与解答 四、负载均衡 4、1 题目描述 4、2 题解关键思路与解答 五、国际象棋 5、1 题目描述 5、2 题解关键思路…

scala匿名函数

我们在使用scala的时候经常会碰到>写法 官方文档给出的解释是:>箭头左边的元组是参数列表,右侧的表达式的值是返回的值 同时>在scala中代表匿名函数,表示创建了一个函数实例 所有的函数在scala中都是object 实例形式&#xff1a…

在职阿里6年,一个29岁女软件测试工程师的心声

简单的先说一下,坐标杭州,14届本科毕业,算上年前在阿里巴巴的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少) 其中成功的有4家&am…

SSD容量翻倍价格骨折,新颗粒要让硬盘成消耗品

经过这么些年发展,固态硬盘(SSD)基本成了每台电脑的必备硬件之一。 相较于机械硬盘(HDD),SSD 虽说速度读写性能虽说远远领先,但却存在擦写寿命限制。 SSD 闪存颗粒按寿命从高到低、容量从低到高…

centos7 搭建 tinyProxy代理

文章转载于:https://www.cnblogs.com/gezp/p/14962924.html 一、简介 Tinyproxy是一个轻量级的用于POSIX操作系统的http/https代理守护进程。在设计之初就遵循着更快并且更小的原则。在相关的运用案例中,它是一种理想的解决方案,例如在一个需…

Excel 制作动态甘特图

一、简单介绍一下甘特图 甘特图是一种时间轴表现形式的项目管理工具,用于展示项目任务、时间进度和完成情况。甘特图通过水平条形图表示每个任务的开始和结束时间,并使用不同颜色或标记来表示任务的状态和关键节点。 适用于各种需要规划、跟踪和管理进度…

flutter系列之:在flutter中使用相机拍摄照片

文章目录简介使用相机前的准备工作在flutter中使用camera总结简介 在app中使用相机肯定是再平常不过的一项事情了,相机肯定涉及到了底层原生代码的调用,那么在flutter中如何快速简单的使用上相机的功能呢? 一起来看看吧。 使用相机前的准备…

【嵌入式烧录刷写文件】-2.2-合并两个Intel Hex文件

案例背景(共8页精讲): 1.教你如何合并两个Bootloader.hex和App.hex文件; 2.提供了两种方法合并两个Intel Hex文件; 3.基于批处理Bat脚本,以及Vector HexView工具提供的Command line,自动化完成两个Hex文件的合并&#…