Redis rehash

image.png
  • rehash分扩容和缩容,两个过程互斥
  • 交替使用h0和h1,来回搬迁,类似jvm的s1和s2
  • dict结构中的rehashidx默认-1,表示没有在扩容,当rehashidx>=0时,表示处于rehash中,rehashIdx表示当前扩容的桶;
  • 每次的增删改查都会检查当前是否需要rehash,如果达到临界点则需要扩容+迁移;如果没有达到临界点,但处于rehash中,则判断帮忙迁移一次;
  • 一次迁移一个桶,rehashIdx++,redis后台定时任务会在闲时帮忙一次迁移多个桶;
  • 新增时,帮忙后,会直插h1
  • 整个rehash过程类似hashMap的rehash过程,只不过map的rehashMap是一次完成的,redis采用渐进式rehash,因为redis的命令是单步执行,不会有并发冲突。hashMap需要防并发;
  • concurrentHashMap
  • 并行rehash

你可能感兴趣的:(Redis rehash)