Redis主從復制的原理一 之 概述

概述

?本文概要性的介紹了Redis主從復制原理,及新舊版本主從復制的區別,優缺點。具體的主從復制過程可詳見「Redis主從復制原理二 之 主從復制工作流程」

舊版主從復制的實現

?Redis的復制功能分為 同步(sync)和 命令傳播(command propagate)兩個操作:

1)同步操作:作用于將從服務器的數據庫狀態更新至主服務器當前所處的數據庫狀態。
2)命令傳播:作用于在主服務器的數據庫狀態被修改,導致主從服務器的數據庫狀態出現不一致時,讓主從服務器的數據庫重新回到一致狀態。

同步操作

?當客戶端向從服務器發送SLAVEOF命令,要求從服務器復制主服務器時,從服務器首先需要執行同步操作,即,將從服務器的數據庫狀態更新至主服務器當前所處的數據庫狀態。
?從服務器通過向主服務器發送SYNC命令來進行同步操作,SYNC命令的執行步驟如下:

1)從服務器向主服務器發送SYNC命令。
2)收到SYNC命令的主服務器執行BGSAVE命令,在后臺生成一個RDB文件,并使用一個緩沖區記錄從現在開始執行的所有寫命令。
3)當主服務器的BGSAVE命令執行完畢時,主服務器會將BGSAVE命令生成的RDB文件發送給從服務器,從服務器接受并載入這個RDB文件,將自己的數據庫狀態更新至主服務器執行BGSAVE命令時的數據庫狀態。
4)主服務器將記錄在緩沖區里面的所有寫命令發送給從服務器,從服務器執行這些寫命令,將自己的數據庫狀態更新至主服務器數據庫當前所處的狀態。

命令傳播

?同步操作執行完畢后,主從服務器兩者的數據庫狀態達到了一致狀態,但每當主服務器執行完客戶端發送的寫命令時,主從服務器的數據庫狀態將不一致。
?為了讓主從服務器再一次回到一致狀態,主服務器需要對從服務器執行命令傳播操作:主服務器將自己執行的寫命令,發送給從服務器執行,使主從服務器保持一致狀態。

舊版復制功能的缺陷

Redis 2.8以前,從服務器對主服務器的復制可以分為如下兩種情況:

1)初次復制:從服務器以前沒有復制過任何主服務器,或從服務器當前要復制的主服務器和上一次復制的主服務器不同。
2)斷線后重復制:處于命令傳播階段的主從服務器因為網絡原因而中斷了復制,但從服務器通過自動重連重新連接上了主服務器,并繼續復制主服務器。

?缺陷在于:斷線重連后,從服務器將從新執行一遍初次復制的過程,發送SYNC命令給主服務器,主服務器執行BGSAVE命令生成RDB文件,同時將在此期間新執行的寫命令加入緩沖區,當RDB文件生成完畢,將文件發送給從服務器,而后將緩沖區中新增的命令發送給從服務器,自此主從同步完成。

?SYNC命令:一個非常耗資源的操作

1)主服務器需要執行BGSAVE命令來生成RDB文件,這個生成操作會耗費主服務器大量的CPU、內存和磁盤I/O資源。
2)主服務器需要將自己生成的RDB文件發送給從服務器,這個發送操作會耗費主從服務器大量的網絡資源(帶寬和流量),并對主服務器響應請求命令的時間產生影響。
3)接收到RDB文件的從服務器需要載入主服務器發來的RDB文件,并且在載入期間,從服務器會因為阻塞而沒辦法處理命令請求。

?所以Redis有必要保證在真正有需要時才執行SYNC命令。

新版復制功能

?為了解決舊版本復制功能在處理斷線重復制情況時的低效問題,Redis從2.8版本開始,使用PSYNC命令代替SYNC命令來執行復制時的同步操作。

PSYNC命令

?PSYNC命令具有完整完整重同步(full resychronization)和部分重同步(partial resychronization)兩種模式:
1)完整重同步:用于處理初次復制情況:完整重同步執行步驟和SYNC命令的執行步驟基本一致。都是通過讓主服務器執行BGSAVE命令生成RDB文件,并發送,以及向從服務器發送保存在緩沖區里面的寫命令來進行同步。
2)部分重同步:用于處理斷線重連后同步復制:當從服務器在斷線后重新連接主服務器時,如果條件允許,主服務器可以將主服務器連接斷開期間執行的寫命令發送給從服務器,從服務器只要接受并執行這些命令,就可以將數據庫更新至主服務器當前所處的狀態。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83975.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83975.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83975.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡原理 4-TCP3

上篇文章,我們講了TCP協議的連接管理(”三次握手“和”四次揮手“的過程)。 4、滑動窗口 這個滑動窗口是TCP中非常有特點的機制。我們知道,TCP是通過前面講的三個機制:確認應答,超時重傳,連接…

【使用 Loki + Promtail + Grafana 搭建輕量級容器日志分析平臺】

使用 Loki Promtail Grafana 搭建輕量級容器日志分析平臺 摘要 本文介紹如何通過 Docker Compose 快速搭建 Loki 日志存儲、Promtail 日志采集和 Grafana 日志可視化/告警的完整流程。用最小化示例演示核心配置、常見問題排查和告警規則設置,幫助讀者快速上手。…

CRMEB 中 PHP 快遞查詢擴展實現:涵蓋一號通、阿里云、騰訊云

目前已有一號通快遞查詢、阿里云快遞查詢擴展 擴展入口文件 文件目錄 crmeb\services\express\Express.php 默認一號通快遞查詢 namespace crmeb\services\express;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use think\Container; use thi…

使用 Python 自動化 Word 文檔樣式復制與內容生成

在辦公自動化領域,如何高效地處理 Word 文檔的樣式和內容復制是一個常見需求。本文將通過一個完整的代碼示例,展示如何利用 Python 的 python-docx 庫實現 Word 文檔樣式的深度復制 和 動態內容生成,并結合知識庫中的最佳實踐優化文檔處理流程…

【MATLAB代碼】基于MCC(最大相關熵)的EKF,一維濾波,用于解決觀測噪聲的異常|附完整代碼,訂閱專欄后可直接查看

本文所述的代碼實現了一種基于最大相關熵準則(Maximum Correntropy Criterion, MCC)的魯棒性卡爾曼濾波算法(MCC-KF),重點解決傳統卡爾曼濾波在觀測噪聲存在異常值時估計精度下降的問題。通過引入高斯核函數對殘差進行加權處理,有效降低了異常觀測值對狀態估計的干擾。訂…

46、web實驗-遍歷數據與頁面bug修改

46、web實驗-遍歷數據與頁面bug修改 在Web開發中,遍歷數據和修改頁面bug是常見的任務。以下是關于這兩個主題的講解: ### 一、遍歷數據 **目的**:在頁面上動態展示數據,例如用戶列表、商品信息等。 **常用方法**: ####…

華為云Flexus+DeepSeek征文|體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并創建自己的自定義聊天助手

華為云FlexusDeepSeek征文|體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并創建自己的自定義聊天助手 什么是華為云ModelArts 華為云ModelArts ModelArts是華為云提供的全流程AI開發平臺,覆蓋從數據準備到模型部署的全生命周期管理,幫助…

Qwen大語言模型里,<CLS>屬于特殊的標記:Classification Token

Qwen大語言模型里,<CLS>屬于特殊的標記:Classification Token 目錄 Qwen大語言模型里,<CLS>屬于特殊的標記:Classification Token功能解析工作機制應用場景舉例說明技術要點在自然語言處理(NLP)領域 都是<CLS> + <SEP>嗎?一、CLS和SEP的作用與常見用法1. **CLS標…

R語言AI模型部署方案:精準離線運行詳解

R語言AI模型部署方案:精準離線運行詳解 一、項目概述 本文將構建一個完整的R語言AI部署解決方案,實現鳶尾花分類模型的訓練、保存、離線部署和預測功能。核心特點: 100%離線運行能力自包含環境依賴生產級錯誤處理跨平臺兼容性模型版本管理# 文件結構說明 Iris_AI_Deployme…

JAVA畢業設計224—基于Java+Springboot+vue的家政服務系統(源代碼+數據庫)

畢設所有選題: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue的家政服務系統(源代碼數據庫)224 一、系統介紹 本項目前后端分離,分為用戶、家政人員、管理員三種角色 1、用戶: 登錄、注冊、輪播…

滴滴 服務端 面經

一、緩存與數據庫的使用場景及性能差異 1. 緩存的適用場景 高頻讀、低頻寫場景:如商品詳情頁、用戶信息等讀多寫少的數據,減少數據庫壓力。實時性要求不高的數據:如首頁推薦列表、統計數據(非實時更新),允…

linux操作系統---網絡協議

目錄 案例演練----網絡搭建 路由啟配置 多個路由情況下如何聯通 靜態路由 案例演練----網絡搭建 Cisco交換機的命令行用戶模式1 switch> 特權模式1 switch>enable disable回到用戶模式 2 switch#全局配置模式1 switch#config terminal 2 switch(co…

華為OD機試_2025 B卷_計算某個字符出現次數(Python,100分)(附詳細解題思路)

文章目錄 題目描述字符計數解析:簡單高效的統計方法核心解題思路完整代碼實現應用場景擴展 題目描述 寫出一個程序,接受一個由字母、數字和空格組成的字符串,和一個字符,然后輸出"輸入字符串(第二行輸入的字符&a…

華為倉頡語言初識:并發編程之同步機制(上)

前言 線程同步機制是多線程下解決線程對共享資源競爭的主要方式,華為倉頡語言提供了三種常見的同步機制用來保證線程同步安全,分別是原子操作,互斥鎖和條件變量。本篇文章詳細介紹主要倉頡語言解決同步機制的方法,建議點贊收藏&a…

樹莓派遠程登陸RealVNC Viewer出現卡頓

原因是:沒有連接顯示屏,圖像傳輸會受到限制。 沒有顯示屏怎么解決: 📝 樹莓派5虛擬顯示器配置教程(強制啟用全性能GPU渲染) 🔧 步驟1:安裝虛擬顯示驅動 bash 復制 下載 # 更…

go-zero微服務入門案例

一、go-zero微服務環境安裝 1、go-zero腳手架的安裝 go install github.com/zeromicro/go-zero/tools/goctllatest2、etcd的安裝下載地址根據自己電腦操作系統下載對應的版本,具體的使用自己查閱文章 二、創建一個user-rpc服務 1、定義user.proto文件 syntax &qu…

[BIOS]VSCode zx-6000 編譯問題

前提:Python 3.6.6及以上版本安裝成功,Python 3.6.6路徑加到了環境變量# DEVITS工具包準備好 問題:添加環境變量 1:出現環境變量錯誤,“py -3” is not installed or added to environment variables #先在C:\Windows里…

【Linux】系統部分——進程控制

11.進程控制 文章目錄 11.進程控制一、進程創建二、進程終止退出碼進程終止的方式 三、進程等待進程等待的方式獲取?進程status小程序阻塞與非阻塞等待 四、進程程序替換替換原理進程程序替換的接口——exec替換函數 五、總結 一、進程創建 之前學習了fork()函數創建子進程&a…

【讀論文】U-Net: Convolutional Networks for Biomedical Image Segmentation 卷積神經網絡

摘要1 Introduction2 Network Architecture3 Training3.1 Data Augmentation 4 Experiments5 Conclusion背景知識卷積激活函數池化上采樣、上池化、反卷積softmax 歸一化函數交叉熵損失 Olaf Ronneberger, Philipp Fischer, Thomas Brox Paper:https://arxiv.org/ab…

藍牙音樂(A2DP)音頻延遲的一些感想跟分析,讓你對A2DP體驗更佳深入

零.聲明 最近做藍牙協議棧的過程中遇到一些客戶偶爾提報音頻延遲的問題,所以引發了一些感想,跟大家分享下,音頻延遲主要的影響范圍是對一些要求實時性比較高的場景有比較差的體驗 連接藍牙看視頻的過程中,發現音畫不同步&#x…