redis 字典

本文详细介绍了Redis字典的结构,包括ht[0]和ht[1]的作用,以及字典如何使用开链法解决哈希冲突。重点讨论了字典的Rehash过程,包括Rehash的触发时机(负载因子条件)和执行方式,如渐进式Rehash策略。在Rehash期间,Redis如何保证增删查改操作的正确性。
摘要由CSDN通过智能技术生成

字典类图

1、字典中保存一个函数表头列表,ht[0] 平时存储数据,ht[1]空闲,当rehash的时候ht[1]分配rehash的空间
2、type中存储字典中的各种函数
3、treashindex为-1,标示没有进行rehash,不为零标示rehash的进度
在这里插入图片描述

redis 字典结构

字典在一般情况下,只有ht[0]表有数据
字典解决hash冲突的方法时开链法
在这里插入图片描述

redis 字典rehash

rehash的时机

  • 当字典没有执行BGSAVE或者BGREWRITEAOF的时候,哈希表的负载因子大于等于1
  • 当字典执行BGSAVE或BGREWRITEAOG的时候,哈希表负载因子大于等于5

rehash的方式

  • 为ht[1]分配空间,如果是扩容新容量大小为第一个大于ht[0].used*2的2的n次幂,如果是缩容操作,新容量为第一个大于ht[0].used的2的n次幂
  • 将ht[0]上的值rehash到ht[1]上去
  • 当所有的值rehash完后,释放ht[0],将ht[1]设置为ht[0],重新分配ht[1]
  • rehash是渐进式的,每次用户增删改查时,将rehashidx上的所有值rehash到ht[1],然后rehashidx+=1;这个过程中增加的值直接增加到ht[1]上;这个过程中查询操作,可以先判断rehashidx,如果小于rehashidx则在旧表查,否则,在新表查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值