Redis的持久化(新)

? ? ? ? Redis中數據都保存在內存,但是內存中的數據變換很快,也很容易丟失,比如連接斷開、宕機停機等等。而Redis提供的數據持久化機制有RDB(Redis DataBase)AOF(Append Only File)

1.RDB

????????RDB是指在指定的時間間隔內將內存中的數據集快照寫入到磁盤中,也是默認的持久化的方式,利用數據快照,使用的是寫時復制技術,將數據以二進制的格式保存在磁盤。

1.1觸發快照的時機(save)

1.1.1手動觸發

手動觸發分別對應save和bgsave命令:

  • save命令:阻塞當前Redis服務,去做持久化操作,直到RDB持久化過程完成為止,不推薦使用。

  • bgsave命令:redis進程執行fork操作創建子進程,子進程負責RDB持久化,完成后子進程自動結束,而且原進程的阻塞只發生在fork階段。

1.1.2自動觸發

????????利用save進行相關配置,我們進入到redis.conf文件中,其中Save m n就表示若在m秒里面至少進行了n次數據更改時會自動執行bgsave

????????我們將需要持久化的數據寫入磁盤中保存,磁盤中的文件名為dump.rdb,和bin在同一個目錄,redis啟動時,就是讀取dump.rdb文件將數據加載進內存中的。文件的名字可在redis.conf文件里面進行修改。

?注意

  1. 如果只開啟了rdb,通過shutdown save命令斷開Redis的連接時,也會自動執行bgsave。

  2. 在調試級別(debug)中重新啟動Redis時,不會清空內存中的數據,這意味著原有的RDB文件仍然有效,即使未執行保存操作。

  3. 當Redis執行全量復制(主從復制)時,如果沒有執行save或bgsave命令并且沒有添加配置策略,主節點會自動生成RDB文件,并傳輸給從節點進行數據同步。

1.2RDB持久化和數據恢復的完整流程(bgsave)

????????當需要進行持久化時,Redis會單獨創建一個子進程來完成持久化操作,這個子進程中所有的數據都和原進程保持一致,而且是一個全新的進程,也會占用內存,這個操作也稱為Fork

????????此時原進程不進行任何操作,由其子進程完成數據的持久化,子進程會先將快照數據寫入到一個臨時的文件,等到數據寫完了之后,再用這個臨時的文件直接替換磁盤上的dump.rdb文件即可。

????????但是缺點是如果子進程正在將數據寫入臨時文件,此時突然宕機,無法將臨時文件替換dump.rdb,下次啟動后,恢復后的內存數據較與宕機之前相比就會丟失一部分。

????????發現整個過程中,原進程是不進行任何IO操作的,這就確保了極高的性能。

1.3RDB方式的優劣分析

1.3.1優點
  • 恢復數據速度快。

  • 節省磁盤空間(二進制格式存儲)。

1.3.2缺點
  • fork的時候,會占用內存空間。

  • 可能會丟失數據,不適用于數據一致性高的場景。

2.AOF

日志的形式來記錄每個更改的操作,不會記錄讀的操作,只允許追加而不允許改寫。在redis重啟或啟動之初會讀取該文件然后重新構建Redis數據庫的數據,這樣也不用害怕內存數據的丟失了。

AOF方式Redis默認是不開啟的,如果要開啟則需要在配置文件中修改,若AOF和RDB同時開啟,系統默認選擇用AOF來恢復數據,AOF在磁盤中保存的日志文件是"appendonly.aof",文件的路徑和RDB一致。

2.1AOF同步頻率策略

  • appendsync always :表示每次的修改都會立刻記入磁盤日志文件,性能較差但是能保證數據的一致性。

  • appendsync everysec (默認) :每一秒執行一次數據同步,但可能會在臨界點丟失數據。

  • appendfsync no:redis不主動進行同步,把同步時機交給操作系統。

2.2Rewrite壓縮

因為AOF采用的是追加寫入的方式,為了避免磁盤AOF文件越來越大,新增了重寫機制,當文件默認達到128MB時,Redis就會自動進行AOF文件的內容壓縮,保留能達到最終結果的最小指令集。

2.2.1重寫的整體流程梳理(自動的)
  1. 主進程fork一個子進程去執行重寫的操作,主進程正常運行不會阻塞。

  2. 主進程執行的寫操作要同時寫入AOF緩沖區和AOF_rewrite緩沖區,此時子進程遍歷內存數據將自己壓縮的指令集先存儲到臨時文件(新AOF文件),之后向主進程發送信號。

    注意:這里AOF緩沖區是否要根據同步策略將數據同步到磁盤AOF文件中?

    可以進行設置。如果同步,那么數據安全一致性,但是性能會比較低。如果不同步,若此時宕機,會造成數據丟失,但是性能比較高。

  3. 主進程把AOF_rewrite緩沖區中的數據寫入到臨時文件中。

  4. 使用臨時文件(新AOF文件)覆蓋舊的AOF文件,完成AOF重寫。

2.3AOF持久化和數據恢復的完整流程

  1. 寫操作命令先會被追加寫入到AOF緩沖區內。

  2. AOF緩沖區根據同步頻率策略將緩沖區數據同步到磁盤AOF文件中。

  3. 看磁盤AOF文件大小是否超過閾值,判斷要不要rewrite重寫。

  4. 如果Redis宕機,重啟服務時,會加載AOF文件來進行數據恢復。

2.4AOF文件出現損壞

????????如遇到AOF文件損壞,通過.........../bin/redis-check-aof--fix appendonly.aof進行恢復。恢復后重啟Redis服務即可。

2.5AOF方式的優劣分析

2.4.1優點
  • 備份機制更加的穩健,丟失數據概率更低。

  • 可讀的日志文件。

2.4.2缺點
  • 相比RDB占用更多的磁盤空間。

  • 恢復數據相比RDB更慢。

  • 如果每次寫操作都同步,對性能要求較高。

  • AOF文件可能出現損壞,需要手動修復。

????????????????

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

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

相關文章

HTML玩轉超鏈接a標簽

大家應該都知道,a標簽主要是轉跳鏈接,接下來,讓我為大家介紹一下a標簽的使用! 主要的作用:從當前頁面進行跳轉 標簽名標簽語義常用屬性單/雙標簽a超鏈接href:要跳轉的具體位置 target:跳轉時如…

第一百七十七回 如何創建垂直方向的Switch

文章目錄 1. 概念介紹2. 思路與方法2.1 實現思路2.2 實現方法3. 示例代碼4. 內容總結我們在上一章回中介紹了"如何創建漸變色邊角"相關的內容,本章回中將介紹" 如何創建垂直方向的Switch".閑話休提,讓我們一起Talk Flutter吧。 1. 概念介紹 我們在前面…

zookeeper單機版的搭建

一 zookeeper的搭建 1.1 上傳zkjar包 1.2 搭建配置 1.解壓壓縮包 [rootlocalhost export]# tar -zxvf zookeeper-3.7.0-bin.tar.gz 2.創建data文件夾 [rootlocalhost export]# cd apache-zookeeper-3.7.0-bin/ [rootlocalhost apache-zookeeper-3.7.0-bin]# ls bin conf…

利用人工智能打破應試教育慣性促進學生思維活化與創新能力培養的研究

全文均為人工智能獨立研究完成 應試教育導致學生迷信標準答案慣性導致思維僵化-移動機器人-CSDN博客 用AI魔法打敗AI魔法-CSDN博客 課題名稱建議:“利用人工智能打破應試教育慣性,促進學生思維活化與創新能力培養研究”。 這個課題名稱明確指出了研究的…

高斯消元(完全主元法 and 部分主元法) C++代碼

部分主元法高斯消元 /* 算法步驟&#xff1a;1.枚舉每一列&#xff0c;找到絕對值最大的一行2.將該行和第一行交換3.將該行行首置為一4.將下面所有行第 i 列置為零 */#include <iostream> #include <cmath>using namespace std; const int N 109; const double e…

Linux內核的內存管理

Linux內核源碼內存管理主要包括以下幾個部分&#xff1a; 1. 物理內存管理&#xff1a;這部分主要負責將物理內存劃分為不同的頁表項&#xff0c;以便操作系統能夠快速地訪問和操作內存。 2. 虛擬內存管理&#xff1a;這部分主要負責將用戶空間的地址映射到物理內存中&#x…

linux之進程地址空間

文章目錄 1.進程地址空間回顧1.1進程地址空間劃分1.2驗證進程地址空間劃分1.簡單劃分2.完整劃分 2.初探進程地址空間2.1初看現象2.2Makefile的簡便寫法 3.進程地址空間詳解3.1地址空間是什么?3.2地址空間的設計/由來3.3空間區域劃分3.4如何理解地址空間?3.5解釋3.2的&#x1…

警惕.locked勒索病毒,您需要知道的預防和恢復方法。

尊敬的讀者&#xff1a; 隨著網絡技術的進步&#xff0c;勒索病毒已經成為一種極具威脅性的網絡犯罪工具之一。其中&#xff0c;.locked勒索病毒是一種采用高級加密算法的惡意軟件&#xff0c;目的是加密用戶的文件&#xff0c;并勒索贖金以提供解密密鑰。本文將介紹如何應對被…

解決No Feign Client for loadBalancing defined,修改Maven依賴

Spring微服務報錯&#xff1a; java.lang.IllegalStateException:FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-netf…

你不知道的庫:庫的種類,作用和加載方式

你不知道的庫&#xff1a;庫的種類&#xff0c;作用和加載方式 &#x1f4df;作者主頁&#xff1a;慢熱的陜西人 &#x1f334;專欄鏈接&#xff1a;Linux &#x1f4e3;歡迎各位大佬&#x1f44d;點贊&#x1f525;關注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客…

組件化——組件的實現原理

渲染器主要負責將虛擬 DOM 渲染為真實 DOM&#xff0c;我們只需要使用虛擬 DOM 來描述最終呈現的內容即可。但當我們編寫比較復雜的頁面時&#xff0c;用來描述頁面結構的虛擬 DOM 的代碼量會變得越來越多&#xff0c;或者說頁面模板會變得越來越大。這時&#xff0c;我們就需要…

iperf3 網絡測試

iperf3 測試網絡的上下行帶寬 下載地址 https://iperf.fr/iperf-download.php 開啟服務器 開啟客戶端 常用命令 -c 代表客戶端-s 代表服務端-u 代表 udp-r 代表數據方向是否反向 https://baijiahao.baidu.com/s?id1731514357681464971&wfrspider&forpc

C++學習 --queue

目錄 1&#xff0c; 什么是queue 2&#xff0c; 創建queue 2-1&#xff0c; 標準數據類型 2-2&#xff0c; 自定義數據類型 2-3&#xff0c; 其他創建方式 3&#xff0c; 操作stack 3-1&#xff0c; 賦值 3-2&#xff0c; 插入元素(push) 3-3&#xff0c; 查詢元素 3…

Python簡直是萬能的,這5大主要用途你一定要知道!

從2015開始國內就開始慢慢接觸Python了&#xff0c;從16年開始Python就已經在國內的熱度更高了&#xff0c;目前也可以算的上"全民Python"了。 眾所周知小學生的教材里面已經有Python了&#xff0c;國家二級計算機證也需要學習Python了&#xff01; 因為Python簡單…

編程語言發展史:布爾代數和機器語言

布爾代數是一種數學理論&#xff0c;用于描述和分析邏輯和布爾值的關系。它是由英國數學家George Boole在19世紀中期發明的&#xff0c;被認為是現代計算機科學的基礎之一。布爾代數的發明使得邏輯運算可以被表示為代數運算&#xff0c;從而為計算機科學的發展奠定了基礎。 在…

PTA 7-4 數列求和-加強版

7-4 數列求和-加強版 分數 20 全屏瀏覽題目 作者 DS課程組 單位 浙江大學 給定某數字A&#xff08;1≤A≤9&#xff09;以及非負整數N&#xff08;0≤N≤100000&#xff09;&#xff0c;求數列之和SAAAAAA?AA?A&#xff08;N個A&#xff09;。例如A1, N3時&#xff0c;S1…

Unity、UE和Godot的優劣對比

先占位。。。。。。 首先說Unity和UE這兩家公司&#xff0c;是行業的兩座燈塔&#xff0c;對整個游戲引擎的這個行業的發展具有這種指導性的這種作作用。這兩個引擎我從2016年開始就一直在用&#xff0c;結合一下業內的共識&#xff0c;一般來說認為呢&#xff0c;Unity更擅長移…

2023全球邊緣計算大會深圳站-核心PPT資料下載

一、峰會簡介 邊緣計算&#xff0c;是指在靠近物或數據源頭的一側&#xff0c;采用網絡、計算、存儲、應用核心能力為一體的開放平臺&#xff0c;就近提供最近端服務。其應用程序在邊緣側發起&#xff0c;產生更快的網絡服務響應&#xff0c;滿足行業在實時業務、應用智能、安…

LeetCode算法題解(動態規劃,背包問題)|LeetCode416. 分割等和子集

LeetCode416. 分割等和子集 題目鏈接&#xff1a;416. 分割等和子集 題目描述&#xff1a; 給你一個 只包含正整數 的 非空 數組 nums 。請你判斷是否可以將這個數組分割成兩個子集&#xff0c;使得兩個子集的元素和相等。 示例 1&#xff1a; 輸入&#xff1a;nums [1,5,…

Linux中的進程程序替換

Linux中的進程程序替換 1. 替換原理2. 替換函數3. 函數解釋4. 命名理解程序替換的意義 1. 替換原理 替換原理 用fork創建子進程后執行的是和父進程相同的程序(但有可能執行不同的代碼分支),子進程往往要調用一種exec函數以執行另一個程序。當進程調用一種exec函數時,該進程的…