redis设计与实现 书中说,当服务器正处于BGSAVE或者BGREWRITEAOF时,并且哈希表的负载因子大于5,
会进行哈希表的扩展。。。
想请教一下。。。为什么这里的负载因子会大于1呢?这个5哪里来的额?
如果你仔细看了那本很不错的书的话,可以再细看一波,往前翻几页有哈希表的定义,size是指哈希表底层数组的大小,used是指存的所有键值对数量,当发生哈希冲突即数组单个元素上存了多个键值对时,负载因子可能会大于1。
你说的情况假设是数组的每个元素平均发生了四次哈希冲突,每个链表存了五个键值对。
不会超过1,意思就是永远也别在子进程存在期间进行哈希扩展操作
链地址法可以把发生碰撞元素放在链表上,当负载因子大于1时,发生碰撞的概率变大了,但还是可以继续在链表上增加元素。
used指的不是数组被占用的个数,指的是所有元素的个数,包括单链表中的多个节点,所以used大于size,是很有可能的