Redis クラスターには 16384 のハッシュ スロットが組み込まれています。キーと値を Redis クラスターに配置する必要がある場合、Redis はまず crc16 アルゴリズムを使用してキーの結果を計算し、次に結果の残りを計算します。から 16384 まで、各キーは 0 ~ 16383 の番号が付けられたハッシュ スロットに対応し、redis はノードの数に応じてハッシュ スロットを異なるノードにほぼ均等にマップします。
Redis クラスターは一貫したハッシュを使用しませんが、ハッシュ スロットの概念を導入します。
Redis クラスターには 16384 のハッシュ スロットがあります。各キーは CRC16 検証後に 16384 を法としてチェックされ、配置するスロットが決定されます。クラスター内の各ノードは、ハッシュ スロットの一部を担当します。この構造により、ノードの追加または削除が簡単になり、ノードが追加、削除、または変更されても、クラスターが使用できなくなることはありません。
ハッシュ スロットを使用する利点は、ノードを簡単に追加または削除できることです。
ノードを追加する必要がある場合は、他のノードの一部のハッシュ スロットを新しいノードに移動するだけで済みます。
ノードを削除する必要がある場合は、削除されたノード ハッシュ スロットを他のノードに移動するだけです;
現時点では、将来ノードを追加または削除するときに最初にすべての Redis サービスを停止する必要はありません。
「一貫性のあるハッシュ アルゴリズムの代わりにハッシュ スロットの概念が使用されています。すべてハッシュではありませんか? これを行う理由は何ですか?」
Redis クラスター一貫性のあるハッシュを使用しない、私が作成した crc16 の単純なハッシュ アルゴリズムです。 Redis の作成者は、その crc16(key) mod 16384 の効果がすでに良好であると信じています。整合性ハッシュほど柔軟ではありませんが、実装は非常に簡単で、ノードの追加または削除時の処理も非常に便利です。 。
「ノードを動的に追加および削除するには、データが失われませんか?」
ノードの追加または削除時にデータが失われないことは、ハッシュ アルゴリズムとは関係ありません。必要なものデータを失わないようにするためには、データのコピーが何個あるかが重要です。
「クラスターには合計 2 の 14 乗、16384 個のハッシュ スロットもあります。では、各ハッシュ スロットに格納されるキーと値は何ですか?」
Redis に移動 クラスターにキーが追加されると、crc16(key) mod 16384 に基づいてキーがどのハッシュ スロットに配布されるかが計算され、ハッシュ スロットには多数のキーと値が存在します。テーブル パーティションとして理解できます。単一ノードで Redis を使用する場合、テーブルは 1 つだけあり、すべてのキーはこのテーブルに配置されます。Redis Cluster に切り替えると、16384 個のパーティション テーブルが自動的に生成されます。上記の単純なアルゴリズムにより、キーがどのパーティションに存在する必要があるかが決まります。各パーティションには多数のキーがあります。
以上がRedis にはハッシュ スロットがいくつありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。