HASH table 3 - wyc902/redis GitHub Wiki
书接上回,说说rehash
前面说到过当hash因子满足一定条件的时候,会扩展或者收缩hash表。如果字典里只存着几个键,那么rehash很快就能完成,但是如果键值对的数量太多,有可能导致短时间内计算量过大服务器停服。所以redis采取的是渐进式rehash。
1 为ht[1]分配空间,rehashidx=0指向ht[0]起始位置。
2 每当对hash表采取增删改查操作时,除了执行相应的操作,还要把rehashidx指向位置的所有键值对rehash到ht[1]表上,rehashidx增1
3 rehashidx==-1 表示rehash完成,释放ht[0], ht[0]=ht[1],ht[1]=null.
在rehash过程中所有新增加的键只会存到ht[1],所以ht[0]只减不增,rehash一定会结束。