#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 サイトの他の関連記事を参照してください。