Redis笔记:Redis的字典什么时候进行Rehash?
哈希表的负载因子公式:
load_factor = ht[0].used / ht[0].size
负载因子 = 哈希表已保存节点数量 / 哈希表大小
- 当服务器没有在执行 BGSAVE 命令或者 BGREWRITEAOF 命令,并且哈希表的负载因子大于等于1
- 服务器正在执行 BGSAVE 命令或者 BGREWRITEAOF 命令,并且哈希表的负载因子大于等于5
根据 BGSAVE 命令或 BGREWRITEAOF 命令是否正在执行,服务器执行扩展操作所需的负载因子并不相同,这是因为在执行 BGSAVE 命令或 BGREWRITEAOF 命令的过程中,Redis 需要创建当前服务器进程的子进程,而大多数操作系统都采用写时复制 (copy-on-write)技术来优化子进程的使用效率,所以在子进程存在期间,服务器会提高执行扩展操作所需的负载因子,尽可能地避免在子进程存在期间进行哈希表扩展操作。这可以避免不必要的内存写入操作,最大限度节约内存。另一方面,当哈希表的负载因子小于0.1时,程序自动开始对哈希表执行收缩操作。