Maison >base de données >Redis >Comment réaliser la synchronisation des données dans Redis

Comment réaliser la synchronisation des données dans Redis

(*-*)浩
(*-*)浩original
2019-11-20 13:27:315970parcourir

Comment réaliser la synchronisation des données dans Redis

Le mécanisme de synchronisation maître-esclave de Redis peut assurer la synchronisation des données entre le maître et l'esclave Redis.

Les méthodes synchrones incluent : la réplication complète et la copie incrémentielle (Apprentissage recommandé : didacticiel vidéo Redis )

copie complète

Comment réaliser la synchronisation des données dans Redis

Lorsque l'esclave démarre pour la première fois, connectez-vous au maître et envoyez la commande PSYNC au format pync {runId} {offset}

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

Lorsque le maître reçoit psync ? -1, sachant que l'esclave veut copier intégralement, il informera l'esclave de son runId et de son offset, et répondra avec la commande fullresync {runId} {offset}. Dans le même temps, le maître exécutera la commande bgsave pour générer le fichier rdb, et toutes les commandes d'écriture pendant la période seront écrites dans le tampon.

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

Master bgsave est exécuté et le fichier rdb est envoyé à l'esclave. Une fois le fichier rdb envoyé, la commande d'écriture dans le tampon commence à être envoyée à l'esclave.

L'esclave reçoit le fichier rdb, supprime toutes les anciennes données et commence à charger le fichier rdb.

Une fois la synchronisation du fichier rdb terminée, l'esclave exécute toutes les commandes d'écriture envoyées depuis le tampon maître.

Après cela, chaque fois que le maître exécute une commande d'écriture, il envoie la même commande d'écriture à l'esclave.

Copie incrémentielle

S'il y a une situation anormale telle qu'une interruption du réseau ou une perte de commande, lorsque la connexion maître-esclave est restaurée, car le nœud esclave a préalablement enregistré son propre copié Le décalage et l'ID d'exécution du nœud maître. Ils seront donc envoyés au nœud maître en tant que paramètres psync, nécessitant des opérations de réplication partielle, au format psync {runId} {offset}.

Après avoir reçu la commande psync, le nœud maître vérifie d'abord si le paramètre runId est cohérent avec lui-même, cela signifie que le nœud maître actuel a été copié auparavant ; tampon d'arriéré selon le paramètre de décalage.Si le décalage Une fois les données stockées dans le tampon, une réponse +continue est envoyée au nœud esclave, indiquant qu'une copie partielle peut être effectuée, sinon une copie complète est effectuée.

Le nœud maître envoie les données dans le tampon du backlog de réplication au nœud esclave en fonction du décalage pour garantir que la réplication maître-esclave entre dans un état normal.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn