redis——舊版復制

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

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

同步

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

從服務器對主服務器的同步操作需要通過向主服務器發送?SYNC?命令來完成, 以下是?SYNC?命令的執行步驟:

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

命令傳播

在同步操作執行完畢之后, 主從服務器兩者的數據庫將達到一致狀態, 但這種一致并不是一成不變的 —— 每當主服務器執行客戶端發送的寫命令時, 主服務器的數據庫就有可能會被修改, 并導致主從服務器狀態不再一致。

舉個例子, 假設一個主服務器和一個從服務器剛剛完成同步操作, 它們的數據庫都保存了相同的五個鍵?k1?至?k5

如果這時, 客戶端向主服務器發送命令?DEL?k3?, 那么主服務器在執行完這個?DEL?命令之后, 主從服務器的數據庫將出現不一致: 主服務器的數據庫已經不再包含鍵?k3?, 但這個鍵卻仍然包含在從服務器的數據庫里面

為了讓主從服務器再次回到一致狀態, 主服務器需要對從服務器執行命令傳播操作: 主服務器會將自己執行的寫命令 —— 也即是造成主從服務器不一致的那條寫命令 —— 發送給從服務器執行, 當從服務器執行了相同的寫命令之后, 主從服務器將再次回到一致狀態。

缺陷

 其中可以明顯看出重新連接主服務器之后,SYNC命令創建包含k1-k10089的RDB文件。而事實上只需要再同步斷線后的k10087-k10089即可。SYNC的“全同步”對于從服務來說是不必要的。

? ? ? ? ? ?SYNC命令非常消耗資源,原因有三點:

    1)主服務器執行BGSAVE命令生成RDB文件,這個生成過程會大量消耗主服務器資源(CPU、內存和磁盤I/O資源)

    2)主服務器需要將自己生成的RBD文件發送給從從服務器,這個發送操作會消耗主從服務器大量的網絡資源(帶寬與流量)

    3)接收到RDB文件你的從服務器需要載入RDB文件,載入期間從服務器會因為阻塞而導致沒辦法處理命令請求。

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

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

相關文章

Linux(3)-網-ifconfig,ping,ssh

終端命令網-ping,ssh1. ifconfig -a2. ping3. ssh3.1安裝3.2 連接3.3 配置登入別名防火墻端口號,todo1. ifconfig -a 查看IP地址, 還可以用于配置網口。 ifconfig -a 2. ping ping命令: 檢測到IP地址的連接是否正常。命令開始后由本機發送數據包a&…

redis——相關問題匯總

什么是redis? Redis 本質上是一個 Key-Value 類型的內存數據庫, 整個數據庫加載在內存當中進行操作, 定期通過異步操作把數據庫數據 flush 到硬盤上進行保存。 因為是純內存操作, Redis 的性能非常出色, 每秒可以處理…

一文搞定面試中的二叉樹問題

一文搞定面試中的二叉樹問題 版權所有,轉載請注明出處,謝謝! http://blog.csdn.net/walkinginthewind/article/details/7518888 樹是一種比較重要的數據結構,尤其是二叉樹。二叉樹是一種特殊的樹,在二叉樹中每個節點…

無數踩坑系列(1)--Brightness Controller

Brightness Controller1.嘗試找回系統自帶亮度調節條1.1 配置grub文件,無效1.2 使用命令調節屏幕亮度,無效2.安裝應用程序Brightness Controller2.1許多博文都寫出了如下方案,無效:2.2 github 手動安裝https://github.com/LordAmi…

springboot2——MyBatis入門

原生缺陷: 數據庫dao層操作缺陷: ①jdbc的增刪改查代碼的冗余過大,查詢的時候需要遍歷。 ②Sql語句和數據庫相關參數和代碼的耦合性過高。 解決:使用Mybatis 業務層缺陷: ①業務層和數據…

面試--Linux命令總結

顯示目錄和文件的命令 Ls:用于查看所有文件夾的命令。 Dir:用于顯示指定文件夾和目錄的命令 Tree: 以樹狀圖列出目錄內容 Du:顯示目錄或文件大小 修改目錄,文件權限和屬主及數組命令 Chmod:用于改變指定…

Linux(4)-資源-du,top,free,gnome

Linux終端命令1.磁盤資源1.1 df -hl1.2 du1.3 統計文件數量2.緩存資源2.1 top2.2 free -m3.Gnome3.1系統監視器-gnome-system-monitor3.2 截屏--screenshot查看文件系統資源的一些命令1.磁盤資源 1.1 df -hl 查看分區磁盤使情況 硬盤空間不夠時,跑程序會報錯&…

redis——Java整合

redis官網 微軟寫的windows下的redis 我們下載第一個 額案后基本一路默認就行了 安裝后&#xff0c;服務自動啟動&#xff0c;以后也不用自動啟動。 出現這個表示我們連接上了。 redis命令參考鏈接 Spring整合Redis 引入依賴 - spring-boot-starter-data-redis <depend…

無限踩坑系列(4)-遠程登入服務器

遠程操作服務器1.遠程上傳/下載命令&#xff08;文件夾/文件&#xff09;2.文本編輯vim3.一直保持服務器登入狀態4.虛擬終端screenssh遠程登入服務器&#xff0c;沒有圖形界面&#xff0c;只能在終端中操作文件與文件夾。本文總結了遠程登入服務器過程中用到的一些命令。1.遠程…

程序員不成熟的若干個特征

做我們這個項目也是一樣&#xff0c;很多人來做這個生意&#xff0c;開始沒有什么成績&#xff0c;就想著要放棄&#xff0c;有的人一個月放棄&#xff0c;有的人三個月放棄&#xff0c;有的人半年放棄&#xff0c;有的人一年放 棄&#xff0c;我不明白人們為什么輕易放棄這個趨…

一文理解KMP算法

一文理解KMP算法 作者&#xff1a;July 時間&#xff1a;最初寫于2011年12月&#xff0c;2014年7月21日晚10點 全部刪除重寫成此文&#xff0c;隨后的半個多月不斷反復改進。后收錄于新書《編程之法&#xff1a;面試和算法心得》第4.4節中。 1. 引言 本KMP原文最初寫于2年多前的…

小貓的java基礎知識點匯總(下)

1、線程和進程有什么區別&#xff1f; 進程是操作系統資源分配的基本單位&#xff0c;而線程是任務調度和執行的基本單位 線程是進程的子集&#xff0c;一個進程可以有很多線程&#xff0c;每條線程并行執行不同的任務。 不同的進程使用不同的內存空間&#xff0c;而所有的線…

無數踩坑系列(3)-配置pytorch

配置pytorch環境1. 命令一鍵式安裝2.源碼安裝問題1問題2問題3問題43.克隆一個已有環境&#xff0c;帶pytorch4.GPU驅動版本不對在實際開發中&#xff0c;想要在自己的機子上跑別人的代碼&#xff1b;或者&#xff0c;在新的機子上跑自己的代碼&#xff0c;總是面臨著環境配置的…

小貓的java基礎知識點匯總(上)

1、一個".java"源文件中是否可以包括多個類&#xff08;不是內部類&#xff09;&#xff1f;有什么限制&#xff1f; 可以有多個類&#xff0c;但只能有一個public的類&#xff0c;并且public的類名必須與文件名相一致。 2、short s1 1; s1 s11; 有沒有錯&#xff…

機器學習算法分類總結

機器學習方法分類總結 這篇文章只是一個類似于知識概括的文章&#xff0c;主要作用是幫忙梳理&#xff1a; 1) 分類 貝葉斯模型&#xff08;Bayesian Mode&#xff09; - 樸素貝葉斯算法&#xff08;Naive Bayesian Mode&#xff09; - 平均單依賴估計&#xff08;AveragedO…

無限踩坑系列(5)-MySQLdb

MySQLdb在Python2.x 時使用的是MySQLdbpython3中這個庫已經不再使用了&#xff0c;所有的功能都由pymysql或mysqlclient替代。所以 想在python3中配MySQLdb真是一個深的不能再深的坑了。下面記錄了愚蠢的填坑過程&#xff0c;僅做有類似錯誤的參考。參考文檔&#xff1a;https:…

后端 分頁組件實例

/*** 分頁相關信息*/ public class Page {//當前頁碼private int current1;//顯示的上限private int limit10;//數據總數//用于計算頁數private int rows;//路徑private String path;public int getCurrent() {return current;}public void setCurrent(int current) {if (curre…

大數據學習(07)--MapReduce

文章目錄目錄1.MapReduce介紹1.1 什么是分布式并行編程&#xff1f;1.2 MapReduce模型介紹1.3 map和reduce函數2.MapReduce體系架構3.MapReduce工作流程3.1 概述3.2 MapReduce各個階段介紹3.3 shuffle過程介紹3.3.1 shuffle過程簡介3.3.2 map中的shuffle過程3.3.3 reduce中的sh…

關閉用playsound函數的WAV文件

播放聲音文件 PlaySound函數應用 1.關閉用playsound函數的WAV文件 PlaySound(0,NULL,0);即可 // test2.cpp : Defines the entry point for the application.//#include "stdafx.h"#include <mmsystem.h>int APIENTRY WinMain(HINSTANCE hInstance, …

身份驗證

傳統身份驗證的方法 HTTP 是一種沒有狀態的協議&#xff0c;也就是它并不知道是誰是訪問應用。這里我們把用戶看成是客戶端&#xff0c;客戶端使用用戶名還有密碼通過了身份驗證&#xff0c;不過下回這個客戶端再發送請求時候&#xff0c;還得再驗證一下。 解決的方法就是&…