為什么是16384(2^14)個?
在redis節點發送心跳包時需要把所有的槽放到這個心跳包里,以便讓節點知道當前集群信息,16384=16k,在發送心跳包時使用char
進行bitmap壓縮后是2k(2 * 8 (8 bit) * 1024(1k) = 16K
),也就是說使用2k的空間創建了16k的槽數。
雖然使用CRC16算法最多可以分配65535(2^16-1)個槽位,65535=65k,壓縮后就是8k(8 * 8 (8 bit) * 1024(1k) =65K
),也就是說需要需要8k的心跳包,作者認為這樣做不太值得;並且一般情況下一個redis集群不會有超過1000個master節點,所以16k的槽位是個比較合適的選擇。
參考文獻
作者:泰迪的bagwell鏈接:https://www.jianshu.com/p/de268f62f99b
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。