【redis】dict

来源:互联网 发布:linux 程序运行权限 编辑:程序博客网 时间:2024/04/30 13:52

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位操作系统?

0 0
原创粉丝点击