目录
为什么要有渐进式哈希
我们知道当hash表满员时(或负载因子高于阈值时)会进行rehash,也就是重新调整空间大小,并拷贝原来的数据。这里rehash就是优化效率的关键。例如假设有1w个元素,rehash时要拷贝1w元素到新的空间,这样势必会成为很大的负担。
简介
redis的数据库使用字典来作为底层实现的,对数据库的增删查改操作也是构建在对字典的操作之上。redis的字典使用hash表作为底层实现。
redis作为一个广泛使用的内存数据库,时间和空间效率都是至关重要的。(redis的根本就是一个大的hashmap,所以对hashmap的优化十分重视)
redis采用渐进式rehash来解决这个问题。
何为渐进式rehash?就是把拷贝节点数据的过程平摊到后续的操作中,而不是一次性拷贝。
所谓平摊到后续的操作中,就是对节点操作,例如再次插入,查找,删除,修改时都会进行拷贝。
原理
数据结构
要想实现这个过程,一个hash结构必须要有以下字段:
两个hash表。一个表拷贝到另一个表的容器
一个标识reh