redis面试:hash冲突怎么办

redis通过链式哈希解决冲突,也就是同一个桶里面的元素使用链表保存。但是当链表过长就会导致查找性能变差可能。所以redis为了追求块,使用了两个全局哈希表。用于rehash操作,增加现有的哈希桶数量,减少哈希冲突。

开始默认使用【hash表1】保存键值对数据,【hash表2】此刻没有分配空间。当数据越来越多的触发rehash操作,则执行以下操作:

  • 给【hash表2】分配更大的空间
  • 将【hash表1】的数据重新映射拷贝到【hash表2】中
  • 释放【hash表1】的空间

值得注意的是,将hash表1的数据重新映射到hash表2的过程并不是一次性的,这样会造成redis阻塞,无法提供服务。

而是采用了渐进式rehash,这样每次处理客户端请求的时候,先从【hash表1】第一个索引开始,将这个位置的所有数据拷贝到h【hash表2】中,就这样将 rehash 分散到多次请求过程中,避免耗时阻塞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值