渐进式哈希总结

渐进式哈希Rehash是Redis为了解决一次性全量拷贝导致的性能问题,它将数据迁移过程分散到后续的操作中。在Rehash过程中,Redis的字典会同时使用ht[0]和ht[1]两个哈希表,查找、新增等操作会在这两个表间进行。当ht[0]达到扩容条件时,开始Rehash,逐步将ht[0]的键值对移动到ht[1],并在完成时让ht[0]指向新空间。
摘要由CSDN通过智能技术生成

目录

为什么要有渐进式哈希

简介

原理

数据结构

Rehash何时开始

Rehash过程

Rehash结束

Rehash详细步骤

Rehash过程中的查找,新增

图解

准备开始rehash

rehash过程中

rehash结束


为什么要有渐进式哈希

我们知道当hash表满员时(或负载因子高于阈值时)会进行rehash,也就是重新调整空间大小,并拷贝原来的数据。这里rehash就是优化效率的关键。例如假设有1w个元素,rehash时要拷贝1w元素到新的空间,这样势必会成为很大的负担。

简介

redis的数据库使用字典来作为底层实现的,对数据库的增删查改操作也是构建在对字典的操作之上。redis的字典使用hash表作为底层实现。

redis作为一个广泛使用的内存数据库,时间和空间效率都是至关重要的。(redis的根本就是一个大的hashmap,所以对hashmap的优化十分重视

redis采用渐进式rehash来解决这个问题。

何为渐进式rehash?就是把拷贝节点数据的过程平摊到后续的操作中,而不是一次性拷贝。
所谓平摊到后续的操作中,就是对节点操作,例如再次插入,查找,删除,修改时都会进行拷贝。

原理

数据结构

要想实现这个过程,一个hash结构必须要有以下字段:
两个hash表。一个表拷贝到另一个表的容器
一个标识reh

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值