对码当歌,猿生几何?

Redis主要底层数据结构扩容

简单动态字符串

  1. 如果SDS修后的长度小于1MB,则将SDS扩容为修改后的字符串长度的2倍(未使用的空间设为修改后的字符串长度)

  2. 如果SDS修后的长度大于等于1MB,则将SDS扩容1MB的空间(未使用的空间设为1MB

  3. 如果字符串缩短,SDS选择惰性释放,将释放的空间使用free记录下来,以便下次使用

hash

触发条件

  • 扩容

未执行BGSAVE,负载因子大于等于1时

执行BGSAVE快照时,负载因子大于等于5时,以尽量避开服务器快照期间扩容

  • 缩容

负载因子小于0.1时

  • 渐进式rehash

扩缩容大小

  1. 扩容,首次大于 字典里元素数量*2*2^n 

  2. 缩容,   首次大于 字典里元素数量*2^n