クライアントは、クラスター内の移動またはリダイレクトをどのように処理したり、尋ねたりしますか?
移動されたエラーは、クラスタートポロジの変更による永続的なキーの再配置を示し、クライアントはスロット間マッピングを更新して新しいノードで再試行する必要があります。 1。移動した応答には、スロット番号と新しいノードアドレスが含まれます。 2。クライアントは、内部マッピングを更新し、それに応じてリクエストをリダイレクトする必要があります。 3.ほとんどの最新のクライアントはこれを自動的に処理します。スロットの移行中の一時的なキーの動きは、一時的なリダイレクトを信号します。 1.一時的に使用するためのターゲットノードアドレスを尋ねます。 2。クライアントは、ターゲットノードでの処理を許可するようにコマンドの前に尋ねを送信する必要があります。 3.スロットマッピングは変更されていません。ベストプラクティスには、ローカルスロットキャッシュの維持、定期的にマッピングの更新、同じノードでの再試行の回避、更新されたクライアントライブラリの使用、非同期接続のサポート、障害の処理、クラスターの健康の監視が含まれます。
クライアントがRedisクラスターのような分散システムと対話すると、移動や質問などのリダイレクト応答に遭遇する可能性があります。これらは、Redisがノード間のデータシェルディングとリバランスを処理する方法の一部です。それらに対応する方法を知ることは、堅牢なクライアントを構築するための鍵です。
これらの2つのタイプのリダイレクトを処理することについて知っておくべきことは次のとおりです。
MOVED
エラーとはどういう意味ですか?
MOVED
応答は、アクセスしようとしているキーがクラスター内の別のノードに永久に移動したことをクライアントに伝えます。これは通常、クラスタートポロジが変化した後に発生します。たとえば、スケーリングやリバランス中にスロットが再割り当てされた場合です。
それを処理する方法:
-
MOVED
と、応答には、キーが属する新しいノードのハッシュスロット番号とアドレス(ホスト:ポート)の両方が含まれます。 - 正しいアクションは、クライアントの内部マッピングを更新するノードがどのスロットを所有しているかを更新し、指定されたノードでリクエストを再試行することです。
例:
クライアントがGET mykey
を送信し、MOVED 12345 192.168.1.2:6380
する場合、GET
コマンドを192.168.1.2:6380
に再発行する必要があります。
- ほとんどの最新のRedisクライアントは、クラスタートポロジを自動的に追跡し、手動介入を必要とせずに
MOVED
リダイレクトをフォローします。
ヒント:
- 繰り返しのリダイレクトを避けるために、スロット間マッピングのローカルキャッシュを維持します。
- クライアントがバックグラウンドトポロジの更新をサポートしている場合、スロットマップを定期的に更新します。
ASK
Redirectionはどうですか?
ASK
Redirectionは、 MOVED
の一時的なバージョンです。スロットの移行中に発生します。スロットからの一部のキーはまだ元のノード上にあり、他のノードはすでに移動されています。
それを処理する方法:
-
MOVED
ように、ASK
にはターゲットノードアドレスが含まれています。 - スロットマッピングを永続的に更新する代わりに、クライアントはこのリクエストのために一時的に指定されたノードにリダイレクトする必要があります。
- コマンドをターゲットに送信した後、クライアントは最初に
ASKING
コマンドを送信して、スロットがまだ完全に所有されていない場合でも、リクエストを処理できることを受信ノードに知らせます。
フローの例:
- クライアントは
GET moving_key
を送信しますASK 192.168.1.3:6381
てください192.168.1.3:6381
に接続しますGET moving_key
を送信する前にASKING
送信します
これにより、宛先ノードが移行ウィンドウ中にリクエストを受け入れるようになります。
なぜそれが重要なのか:
-
ASKING
送信せずに、ターゲットノードはまだ正式にスロットを所有していないため、コマンドを拒否する場合があります。
一般的な落とし穴とベストプラクティス
クラスターのリダイレクトを扱う際に注意すべきことがいくつかあります。
- リダイレクトを無視しないでください:同じノードで盲目的に再試行すると、無限のループまたはエラーが発生します。
- クライアントライブラリの更新:古いクライアントは、完全なクラスター機能を適切にサポートできない場合があります。
- サポートASYNC接続の切り替え:リダイレクトは、アプリケーションをブロックしてはなりません。可能であれば、非ブロッキングI/Oまたはバックグラウンド接続を使用します。
- 部分的な障害を優雅に処理する:一時的な問題のためにいくつかのコマンドが失敗する可能性があります。それに応じて再試行またはログを記録する準備をしてください。
- クラスターの健康を監視する:スロットの移行やノードの変更を監視するには、リダイレクトの予測に役立ちます。
独自のRedisクライアントを書いたり、デバッグしたりする場合、これらのフローを理解すると、トラブルシューティングがはるかに簡単になります。
基本的に、 MOVED
ASK
リダイレクトを尋ねると、変更が永続的であるか一時的な動作であり、それに応じて行動するかを知ることになります。ルーティングテーブルを更新するか、単一のリクエストのために一時的にノードを切り替えます。その論理が正しくなると、ほとんどの複雑さが消えます。
以上がクライアントは、クラスター内の移動またはリダイレクトをどのように処理したり、尋ねたりしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

PSYNCは、Redisマスタースレーブレプリケーションにおける部分的な再同期メカニズムです。これは、スレーブサーバーが切断された後に切断中に失われたデータのみを同期して同期効率を向上させるために使用されます。そのコアは、メインサーバーが維持するキューであるReplicationBackLogに依存しています。デフォルトのサイズは1MBで、最近実行された書き込みコマンドを保存します。スレーブサーバーが再接続すると、PSYNCコマンドが送信され、マスターサーバーはこれに基づいて部分的な同期を実行できるかどうかを判断します。1。runIDは一貫している必要があります。 2。オフセットはバックログバッファーに含まれている必要があります。条件が満たされた場合、データは引き続きオフセットから送信され、それ以外の場合は完全な同期がトリガーされます。 PSYNCの成功率を改善する方法は次のとおりです。1。適切にREPL-Bを増やす

Redisの順序付けられたセットのスコアに基づいてメンバーのリストを取得するには、ZrangeByscoreコマンドを使用する必要があります。 1)基本的な構文は、指定されたスコア範囲内のメンバーを取得するために使用されるZrangeByscoreKeyminmaxです。 2)limitoffsetcountを追加することにより、ページネーションクエリを実装できます。 3)境界値は、withscoresフラグを追加することで除外することができます(minまたはmax; 4)を追加することができます。

AmovedeRrorIndicatesApermanentKeyrelocationDueToclusterTopologyChanges

同期レプリケーションは、メインシステムに書き込まれるたびにリアルタイムでスタンバイシステムにコピーされ、データ損失がゼロになりますが、パフォーマンスに影響を与えます。非同期レプリケーションは、最初に書き込みを確認し、次にレプリケーションを遅らせます。ファイナンス、高可用性クラスター、データ損失を許容できないシナリオなどの重要なシステムに適した同期複製を選択します。データウェアハウス、バックアップシステム、高性能要件を備えた分散アプリケーションに適した非同期レプリケーションを選択します。データの重要性、ネットワーク条件、パフォーマンス要件に基づいて使用する方法を決定します。

setSetakeYywithoptionalConditionSandexpiration、setNxSetSakeYonlyifitdoesは存在しない、およびsetexsetsakewithanexpiration.1.setoffers柔軟性は、柔軟性を備えています(秒)、px(ミリ秒)、nx(setonlyifnotexists)、andxx(setonlyifexists).2.setnxensureakeyisseto

redisfunctionSinversion7solveissuswithtraditionalluascriptingbyEnablingModular、reusableserver-sidelogic.1.theyallowsturucturedfuncturedDefinition forBetterororizationAndainability.2.theyImproveFormAnceThroughlazylazyand.Chaching

redissupportsseospatialdatastorageandqueriesviaitsatatype.1.usegeoadddtostorecoordinateasmembersekey、withsyntaxgeoaddddeddedddeddeddelatitudemember.2

LRANGEは、Redisリストから指定された範囲の要素を取り出すために使用され、正と負のインデックスをサポートします。 1。リスト全体に0から-1を使用します。 2。最初のnに0からn-1を使用します。 3。最後のnに-nから-1を使用します。 4。ページに-nから-1を使用します。 4.ページングを使用して、開始と停止によって制御します。起動は長さまたは停止が端を超え、空の部品または有効な部分を返し、Start> STOPも空に戻します。これは、キャッシュ、ログ、キュー、その他のシナリオに適しています。
