Redis は典型的な no-sql、つまり Python 辞書のようにキーと値のペアを格納し、メモリ内で動作する非リレーショナル データベースです。
そのため、次のように機能するのに非常に適しています。インターネット アーキテクチャ全体 lvs の 4 層フォワーディング層や nginx
の 7 層プロキシ層など、さまざまなレベル間のキャッシュ、特に lnmp アーキテクチャphp-fpm や Tomcat などのアプリケーション層から mysql へのキャッシュを作成して、db への負担を軽減します。
データのかなりの部分は単なるキーと値の単純な対応であり、実際のビジネスでは、短期間に急速に変化することがよくあります
mysql などのリレーショナル データベースをストレージに使用すると、データベースへのアクセスが大幅に増加し、データベースに大きな負荷がかかります。要件は最終的に db
に収束するため、ビジネスの安定性が必要な場合は、db を解決してください。プレッシャーが鍵となるため、現在、ほとんどのソリューションは、すべてのレベルでマルチレベルの no-sql を使用しています。データベース層の上
memcache redis などのように、データベースにバッファリングを提供します
Redis クラスター
Redis クラスターは、次のことができる機能のインストールです。複数の Redis ノード間でデータを共有します。
Redis クラスターは、複数のキーを同時に処理する必要がある Redis コマンドをサポートしていません。これらのコマンドを実行するには、複数の Redis ノード間でデータを移動する必要があり、高負荷下では、これらのコマンドにより Redis クラスターの速度が低下するためです。 . パフォーマンスが低下し、予期しない動作が発生します。
Redis クラスターは、パーティショニングを通じてある程度の可用性を提供します。クラスター内の一部のノードに障害が発生したり、通信できなくなったりした場合でも、クラスターはコマンド リクエストの処理を続行できます。
Redis クラスターには、次の 2 つの利点があります。
データを複数のノードに自動的に分割する機能。
クラスター内の一部のノードで障害が発生したり通信できなくなった場合でも、それらのノードはコマンド要求の処理を続行できます。
クラスター原則
すべての Redis ノードは相互接続され (PING-PONG メカニズム)、バイナリ プロトコルが内部で使用されて伝送速度と帯域幅が最適化されます。
ノードの障害は、クラスター内のノードの半分以上が障害を検出した場合にのみ有効になります。
クライアントは、中間プロキシ層を必要とせず、redis ノードに直接接続されます。クライアントはクラスター内のすべてのノードに接続する必要はなく、クラスター内の使用可能なノードに接続するだけです。
redis-cluster はすべての物理ノードを [0-16383] スロットにマップし、クラスターはノード<->スロット<->値を維持する責任を負います
16384 は Redis に組み込まれますクラスター ハッシュ スロット。キーと値を Redis クラスターに配置する必要がある場合、Redis は最初に crc16 アルゴリズムを使用してキーの結果を計算し、次に結果の残りを 16384 まで計算して、各キーが対応するようにします。間のハッシュ スロットを 0 ~ 16383 の数値に設定すると、redis はノードの数に応じてハッシュ スロットを異なるノードにほぼ均等にマッピングします。
以上がRedis クラスターの原理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。