【redis】dict

本文介绍了Redis中字典(dict)的数据结构及其工作原理,包括dictEntry的组成、dictht的设计以及rehash机制如何确保在进行rehash的同时不影响正常的增删改查操作。此外还介绍了rehash的触发条件及容量调整策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dictEntry由3个东西组成,分别是void *key,void*val,dictEntry *next


dictht需要一个数组,由三个东西即可:

dictEntry **

size

used

数组的元素时dictEntry指针,这样节约空间,空的时候直接NULL即可。采用chaining的方式处理冲突。


如何保证一边rehash的时候,一边可以正常做增删改查呢?因为redis是单进程,单线程,所以没有问题

dict共有2个table,可以完成rehash。cpu即使空闲,也不主动去做,而是在每次增删改查的时候顺便向前推进一步。

移动的时候,先在新表中增加,完成后再删除原表中的bucket


增加:如果正在rehash,那么增加到新表中


当size是bucket总数的5倍时,是十分危险的值,就算设置为不允许rehash,也会进行rehash

使用率小于10%时,会做resize,去掉多余空间。

used>=size且允许rehash时,做rehash。


sizeof(int) == 4  64位操作系统?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值