ホームページ  >  記事  >  データベース  >  Redis でデータ同期を実現する方法

Redis でデータ同期を実現する方法

(*-*)浩
(*-*)浩オリジナル
2019-11-20 13:27:315940ブラウズ

Redis でデータ同期を実現する方法

#Redis のマスター/スレーブ同期メカニズムにより、Redis マスターとスレーブ間のデータ同期が保証されます。

同期方法には次が含まれます: 完全レプリケーションと増分コピー (推奨学習: Redis ビデオ チュートリアル )

# 完全コピー

Redis でデータ同期を実現する方法

スレーブが初めて起動されると、マスターに接続し、psync {runId} { の形式で PSYNC コマンドを送信します。 offset}

{runId} 为master的运行id;{offset}为slave自己的复制偏移量。
slave第一次连接master时,slave并不知道master的runId,也不知道自己偏移量,这时候slave会传一个问号和-1,告诉master节点是第一次同步。格式为psync ? -1

マスターが psync ? -1 を受信すると、スレーブが完全にコピーしたいことを認識し、スレーブに runId とオフセットを通知し、コマンド fullresync {runId} で応答します。 {オフセット}。同時に、マスターは bgsave コマンドを実行して rdb ファイルを生成し、その間のすべての書き込みコマンドはバッファに書き込まれます。

slave接受到master的回复命令后,会保存master的runId和offset,slave此时处于同步状态。
slave处于同步状态,如果此时收到请求,当配置参数slave-server-stale-data yes时,会响应当前请求;slave-server-stale-data no,返回错误。

マスター bgsave が実行され、rdb ファイルがスレーブに送信されます。 rdb ファイルが送信された後、バッファ内の書き込みコマンドがスレーブに送信され始めます。

スレーブは rdb ファイルを受信し、古いデータをすべて破棄し、rdb ファイルのロードを開始します。

rdb ファイルの同期が完了すると、スレーブはマスター バッファから送信されたすべての書き込みコマンドを実行します。

以降、マスターは書き込みコマンドを実行するたびに、同じ書き込みコマンドをスレーブに送信します。

増分コピー

ネットワークの中断やコマンドの損失などの異常な状況が発生した場合、スレーブ ノードが以前に保存していたためにマスターとスレーブの接続が復元されたとき独自にコピーされたマスター ノードのオフセットと実行 ID。したがって、これらは psync {runId} {offset} の形式で、部分的なレプリケーション操作を必要とする psync パラメーターとしてマスター ノードに送信されます。

psync コマンドを受信した後、マスター ノードはまずパラメーター runId がそれ自体と一致するかどうかを確認します。一致する場合は、現在のマスター ノードが以前にコピーされたことを意味し、その後、自身のレプリケーション内で検索されます。データがバッファに格納された後、オフセットが指定されている場合は、部分コピーを実行できることを示す継続応答がスレーブ ノードに送信され、そうでない場合は完全コピーが実行されます。

マスター ノードは、マスター/スレーブ レプリケーションが正常な状態になるように、オフセットに従ってレプリケーション バックログ バッファー内のデータをスレーブ ノードに送信します。

以上がRedis でデータ同期を実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。