#Redis クラスターは一貫したハッシュを使用しませんが、ハッシュ スロットの概念を導入します。 Redis クラスターには 16384 のハッシュ スロットがあります。各キーは CRC16 検証後に 16384 を法としてチェックされ、配置するスロットが決定されます。クラスター内の各ノードはハッシュ スロットの一部を担当します。しかし、なぜハッシュスロットの数は 16384 (2^14) なのでしょうか? この疑問は github で提起され、作者も答えを出しましたので、簡単に分析してみましょう。
なぜ 16384 (2^14) なのでしょうか?
Redis ノードがハートビート パケットを送信するときは、ノードが現在のクラスター情報を認識できるように、すべてのスロットをハートビート パケットに含める必要があります。16384=16k。ハートビート パケットを送信するとき、はビットマップを使用して圧縮されています。2k (2 * 8 (8 ビット) * 1024(1k) = 2K
)、つまり 2k のスペースを使用して 16k のスロットが作成されます。
CRC16 アルゴリズムを使用すると、最大 65535 (2^16-1) スロット (65535=65k) を割り当てることができますが、圧縮後は 8k (8 * 8 (8 ビット) * 1024(1k)) になります。 = 8K
)、つまり、8k のハートビート パケットが必要です。作成者は、それだけの価値はないと考えています。また、通常、Redis クラスターには 1,000 を超えるマスター ノードが存在しないため、16k スロットの方が適切です。選択。 。
著者の原文:
1. 通常のハートビート パケットは、ノードの完全な構成を伝送します。この構成は、冪等な方法で古い構成に置き換えて更新できます。古い構成。これは、ノードのスロット構成が生の形式で含まれていることを意味します。16k スロット構成では 2k のメモリが使用されますが、65k スロットを使用すると 8k のメモリが使用されます。
2. 同時に、その他の設計上の妥協により、Redis クラスターを 1,000 ノードを超えるノードに拡張することはできません。
したがって、各メイン デバイスに十分なスロット (最大 1000) を確保するには、16k の方が適切です。 redis のノード構成情報はビットマップストレージを介して送信されます。送信前に圧縮処理が行われます。圧縮率はスロット数とノード数に大きな関係があります (N が小さい場合、ビットマップにはスロット/N ビットが設定されるため) [スロット数/ノード数] Nが大きくなるほど、圧縮率は小さくなります。
#Redis 関連の技術記事の詳細については、Redis チュートリアル## 列にアクセスして学習してください。
以上がRedis に 16384 個のスロットがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。