数据库
首页 > 数据库> > 【大厂面试题系列】:说说Redis的rehash过程

【大厂面试题系列】:说说Redis的rehash过程

作者:互联网

在这里插入图片描述




Redis的字典由 dict.h/dict 结构如下(rehash的重点)

typedef struct dict {
	
	//类型特性函数
	dictType *type;
	
	//私有数据
	void *privdata;

	//哈希表
	dictht ht[2];
	
	//rehash索引
	//当rehash没有进行时为-1
	int trehashidx;
}

ht 属性是一个包含两个项的数组,数组中的每个项都是一个dictht哈希表,一般情况下使用的都是ht[0]的哈希表,而ht[1]的哈希表只会在rehash的时候使用。

随着操作的进行,哈希表中的键值对会逐渐增多或减少,这时为了让哈希表负载因子位置在一个合理的范围之内就会对哈希表大小进行扩展或收缩即rehash。



rehash流程如下



但是Redis的rehash过程不是一次性rehash,而是渐进式rehash

渐进式rehash

就上诉流程而言


注意:

  • 渐进式rehash的过程中,对于字典的删除、查找、修改都现在 ht[0]哈希表上进行,没有的话就去ht[1]哈希表上
    但是对于增加操作的话,则是直接在ht[1]哈希表上进行,这样的话能确保ht[0]哈希表的键值对数量只会减少,最终随着rehash的完成是ht[0]哈希表变为空表。




觉得不错的小伙伴可以一键三连哦!,感谢支持!!!

更多面试题请移步 大厂面试题专栏


Java从入门到入坟学习路线目录索引


开源爬虫实例教程目录索引


在这里插入图片描述

标签:rehash,面试题,Redis,ht,表上,键值,哈希,trehashidx
来源: https://blog.csdn.net/llllllkkkkkooooo/article/details/115141263