Der Master-Slave-Synchronisationsmechanismus von Redis kann die Datensynchronisation zwischen dem Redis-Master und dem Slave sicherstellen.
Zu den synchronen Methoden gehören: vollständige Replikation und inkrementelle Kopie (Empfohlenes Lernen: Redis-Video-Tutorial )
vollständige Kopie
Wenn der Slave zum ersten Mal startet, stellen Sie eine Verbindung zum Master her und senden Sie den PSYNC-Befehl im Format pync {runId} {offset}
{runId} 为master的运行id;{offset}为slave自己的复制偏移量。 slave第一次连接master时,slave并不知道master的runId,也不知道自己偏移量,这时候slave会传一个问号和-1,告诉master节点是第一次同步。格式为psync ? -1Wenn der Master psync ? -1 empfängt und weiß, dass der Slave vollständig kopieren möchte, informiert er den Slave über seine runId und seinen Offset und antwortet mit dem Befehl fullresync {runId} {offset}. Gleichzeitig führt der Master den Befehl bgsave aus, um die RDB-Datei zu generieren, und alle Schreibbefehle während dieses Zeitraums werden in den Puffer geschrieben.
slave接受到master的回复命令后,会保存master的runId和offset,slave此时处于同步状态。 slave处于同步状态,如果此时收到请求,当配置参数slave-server-stale-data yes时,会响应当前请求;slave-server-stale-data no,返回错误。Master bgsave wird ausgeführt und die RDB-Datei wird an den Slave gesendet. Nachdem die RDB-Datei gesendet wurde, wird der Schreibbefehl im Puffer an den Slave gesendet. Slave empfängt die RDB-Datei, verwirft alle alten Daten und beginnt mit dem Laden der RDB-Datei. Nachdem die RDB-Dateisynchronisierung abgeschlossen ist, führt der Slave alle vom Master-Puffer gesendeten Schreibbefehle aus. Danach sendet der Master jedes Mal, wenn er einen Schreibbefehl ausführt, denselben Schreibbefehl an den Slave.
Inkrementelles Kopieren
Wenn eine ungewöhnliche Situation wie eine Netzwerkunterbrechung oder ein Befehlsverlust auftritt und die Master-Slave-Verbindung wiederhergestellt wird, weil der Slave-Knoten zuvor gespeichert hat sein eigener kopierter Offset und die laufende ID des Masterknotens. Daher werden sie als psync-Parameter im Format psync {runId} {offset} an den Masterknoten gesendet, was einen teilweisen Kopiervorgang erfordert. Nach dem Empfang des psync-Befehls prüft der Masterknoten zunächst, ob der Parameter runId mit sich selbst übereinstimmt. Wenn er konsistent ist, bedeutet dies, dass der aktuelle Masterknoten zuvor in seiner eigenen Replikation gesucht wurde Wenn der Offset-Puffer die Daten im Puffer speichert, wird eine +continue-Antwort an den Slave-Knoten gesendet, die angibt, dass ein teilweises Kopieren durchgeführt werden kann. Der Master-Knoten sendet die Daten im Replikations-Backlog-Puffer entsprechend dem Offset an den Slave-Knoten, um sicherzustellen, dass die Master-Slave-Replikation in einen normalen Zustand übergeht.Das obige ist der detaillierte Inhalt vonSo erreichen Sie die Datensynchronisierung in Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!