为什么在Redis dict中将负载系数设置为1

时间:2019-02-21 14:58:33

标签: hash redis hashmap

我们知道在哈希表中,负载因子对于控制冲突很重要。

  

在Java / HashMap中,默认加载因子为 0.75 ,在CPython / dict中,加载因子设置为 2 / 3

但是,在Redis / dict中,它是 1.0 (启用dict_can_resize时),为什么?

/* If we reached the 1:1 ratio, and we are allowed to resize the hash
 * table (global setting) or we should avoid it but the ratio between
 * elements/buckets is over the "safe" threshold, we resize doubling
 * the number of buckets. */
if (d->ht[0].used >= d->ht[0].size &&
    (dict_can_resize ||
     d->ht[0].used/d->ht[0].size > dict_force_resize_ratio))
{
    return dictExpand(d, d->ht[0].used*2);
}

我认为负载系数应小于 1 。高负载率可能会由于较高的冲突率而增加查找成本。

1 个答案:

答案 0 :(得分:0)

高负载率还可以提高存储效率。 Redis是一个内存数据库,它需要提高内存效率。我认为Redis的作者已经做了一些基准测试,以平衡内存使用和性能。