最近在看Redis的设计与实现,在字典那一章的哈希表的扩展与收缩一小节中,让我产生了一下疑问。原文是这样的。
在这里面,我再次看到了这个词,负载因子。而且貌似和我之前看到的HashMap中的有一些区别。
负载因子,在学习HashMap时会学到,设置一个合适的负载因子,可以有效的避免哈希碰撞,负载因子太大了会有很高的哈希冲突概率,降低查询速度,而太小了则会导致频繁扩容。而在前人的一些科学计算下,将其设置为了比较合适的0.75
而Redis中,哈希表的扩展和搜索是这样决定的
当以下条件中的任意一个被满足时,程序会自动开始对哈希表执行扩展操作:
1)服务器目前没有在执行BGSAVE命令或者BGREWRITEAOF命令,并且哈希表的负载因子大于等于1。
2)服务器目前正在执行BGSAVE命令或者BGREWRITEAOF命令,并且哈希表的负载因子大于等于5。另一方面,当哈希表的负载因子小于0.1时,程序自动开始对哈希表执行收缩操作。
BGSAVE:Redis Bgsave 命令用于在后台异步保存当前数据库的数据到磁盘。
BGREWRITEAOF:Redis Bgrewriteaof 命令用于异步执行一个 AOF(AppendOnly File)