目錄
一 認識持久化
(1)先看總結圖
(2)什么是持久化?
(3)redis是怎么進行持久化的呢
(4)簡單分析一下RDB持久化和AOF持久化的不同
二? RDB持久化
(1)RDB的觸發機制
(2)RDB的bgsave執行流程
(3)RDB文件的處理
(4)RDB的優缺點
(5)RDB效果演示板書
三? 溫習Linux文件系統
一 認識持久化
(1)先看總結圖
(2)什么是持久化?
持久化是指將數據保存在持久存儲介質(如硬盤、數據庫)中,以確保數據在系統重啟或關閉后仍然保持不變。持久化的概念通常應用在計算機領域,確保數據的長期存儲和可靠性。在軟件開發中,持久化可以是將數據寫入文件、數據庫或其他可靠的存儲介質,而不是僅存在于內存中,以保證數據的持久性和可恢復性。
?總結:我們都知道內存有個特性就是掉電易失,而我們的redis就是內存級數據庫,如果掉電狀態那redis在內存中的數據是不是就丟失了,所以我們要把redis中內存數據保存在硬盤上去形成持久化存儲,說大白話,就是數據保存在內存上不叫持久化,保存在硬盤上才叫持久化.
說到持久化就聯想到我們MySQL數據庫的事務中的四個特性了
- 原子性
- 一致性
- 持久性=>和持久化說的是一個意思
- 隔離性
(3)redis是怎么進行持久化的呢
redis為了保證速度快,數據肯定要在內存中,但是為了持久,數據還是要想辦法存儲在硬盤上~
所以redis決定在內存存數據,在硬盤上也存數據(這樣的兩份數據理論上來說是完全相同的,實際上存在小概率有差異,取決于咱們怎么實現持久化)
Redis ?持RDB和AOF兩種持久化機制,持久化功能有效地避免因進程退出造成數據丟失問題, 當下次重啟時利?之前持久化的?件即可實現數據恢復。
- 介紹RDB、AOF的配置和運?流程,以及控制持久化的命令,如bgsave和bgrewriteaof。
- 對常?持久化問題進?分析定位和優化
總結:
在讀取數據的時候直接從內存中讀取
在插入新數據或修改的時候,需要把數據同時寫到內存和硬盤(說是兩邊都寫,但是實際怎么寫硬盤還是有不同的策略可以保證整體的效率還是足夠高)
硬盤上的數據是在redis重啟的時候,用來恢復內存中的數據
(4)簡單分析一下RDB持久化和AOF持久化的不同
總結:
RDB:定期持久化,比如每個月把我電腦上的學習資料,整體進行備份到備份盤里(叫B)?,然后刪除舊備份(叫A),再把新備份名字改為舊備份的名字(A->B),這實際就是RDB過程中的一部分
AOF:實時持久化,只要我下載了一個新的學習資料,就立即把這個學習資料在備份盤里備份一份
二? RDB持久化
(1)RDB的觸發機制
理論:RDB持久化是把當前redis進程數據?成快照保存到硬盤的過程,觸發RDB持久化過程分為?動觸發和 ?動觸發。
?動觸發分別對應save和bgsave命令:
- save命令:阻塞當前Redis服務器,直到RDB過程完成為?,對于內存?較?的實例造成?時間 阻塞,基本不采?。
- bgsave命令:Redis進程執?fork操作創建?進程,RDB持久化過程由?進程負責,完成后?動 結束。阻塞只發?在fork階段,?般時間很短。
- Redis 內部的所有涉及RDB的操作都采?類似bgsave的?式。
除了?動觸發之外,Redis運??動觸發RDB持久化機制,這個觸發機制才是在實戰中有價值的。
- 使?save配置。如"save m n"表?m秒內數據集發?了n次修改,?動RDB持久化。
- 從節點進?全量復制操作時,主節點?動進?RDB持久化,隨后將RDB?件內容發送給從結點。
- 執?shutdown命令關閉Redis時,執?RDB持久化。
對于手動觸發和自動觸發的解讀:
(2)RDB的bgsave執行流程
流程說明:bgsave 是主流的RDB持久化?式,下?根據圖了解它的運作流程。
- 執?bgsave命令,Redis?進程判斷當前進是否存在其他正在執?的?進程,如RDB/AOF?進 程,如果存在bgsave命令直接返回。
- ?進程執?fork創建?進程,fork過程中?進程會阻塞,通過infostats命令查看 latest_fork_usec 選項,可以獲取最近?次fork操作的耗時,單位為微秒。
- ?進程fork完成后,bgsave命令返回"Backgroundsavingstarted"信息并不再阻塞?進程,可 以繼續響應其他命令。
- ?進程創建RDB?件,根據?進程內存?成臨時快照?件,完成后對原有?件進?原?替換。執?lastsave 命令可以獲取最后?次?成RDB的時間,對應info統計的rdb_last_save_time選 項。
- 進程發送信號給?進程表?完成,?進程更新統計信息。
ps:fork()是Linux提供的系統調用,通俗來講就是把父進程的PCB,地址空間,頁表,文件描述符等復制一份給子進程,這樣父進程中的內存數據子進程就得到了完全相同的一份,就可以進行持久化操作了
(3)RDB文件的處理
保存:RDB?件保存再dir配置指定的?錄(默認/var/lib/redis/)下,?件名通過dbfilename 配置(默認dump.rdb)指定。可以通過執?configsetdir{newDir}和configsetdbfilename {newFilename} 運?期間動態執?,當下次運?時RDB?件會保存到新?錄。
壓縮:Redis默認采?LZF算法對?成的RDB?件做壓縮處理,壓縮后的?件遠遠?于內存? ?,默認開啟,可以通過參數configsetrdbcompression{yes|no}動態修改。
校驗:如果Redis啟動時加載到損壞的RDB?件會拒絕啟動。這時可以使?Redis提供的redis check-dump?具檢測RDB?件并獲取對應的錯誤報告。
?板書:
(4)RDB的優缺點
- RDB是?個緊湊壓縮的?進制?件,代表Redis在某個時間點上的數據快照。?常適?于備份,全量復制等場景。?如每6?時執?bgsave備份,并把RDB?件復制到遠程機器或者?件系統中 (如hdfs)?于災備。
- Redis加載RDB恢復數據遠遠快于AOF的?式(RDB以二進制進行存儲,AOF以文本進行存儲)。
- RDB?式數據沒辦法做到實時持久化/秒級持久化。因為bgsave每次運?都要執?fork創建?進程,屬于重量級操作,頻繁執?成本過?。
- RDB?件使?特定?進制格式保存,Redis版本演進過程中有多個RDB版本,兼容性可能有? 險。