redis持久化之RDB

2023-05-12 18:01:04

1. 什麼是RDB:

RDB(Redis DataBase):RDB 永續性以指定的時間間隔執行資料集的時間點快照。
說人話:實現類似照片記錄效果的方式,把某一時刻的資料和狀態以檔案的形式寫到磁碟上,也就是快照,恢復時再將硬碟快照檔案直接讀回到記憶體裡。
這樣一來,即使故障宕機,快照檔案也不會丟失,資料的可靠性也就得到了保證。這個快照檔案就稱為RDB檔案(dump.rdb)。

2. 修改組態檔:

2.1 查詢redis7原始組態檔:

要注意的一點是redis7相比於redis6在快照的時間間隔上和修改頻次是變化較大的

2.2 將時間間隔和頻次修改為5秒2次:

2.3 修改rdb檔案的儲存路徑已經檔名(方便自己查詢):

預設路徑為:/usr/local/redis

修改為:

注意:這裡修改路徑可能會出現問題:


解決方法是dir /myredis/dumpfiles 改成 dir ./myredis/dumpfiles

預設檔名:

修改為:

修改成功:

3. 觸發備份:

3.1 自動觸發:

5秒鐘修改2次自動觸發(兩個條件都要滿足,即時間間隔大於等於5秒,修改次數大於等於2次

3.2 備份恢復:

在啟動服務時,redis自動根據rdb檔案進行備份。
有兩種特殊情況,當執行flushall/flushdb(這種情況生成的rdb檔案即為空,沒有意義)或者退出使用者端,redis自動會生成一個當下最新的rdb檔案。
具體實踐參考https://www.bilibili.com/video/BV13R4y1v7sP?p=31&vd_source=a579082d717747b1e99fe189207e7c29

注意:不可以把備份檔案dump.rdb和生產redis伺服器放在同一臺機器,必須分開各自儲存,以防生產機物理損壞後備份檔案也掛了。
3.3 手動觸發:
兩個命令:save(線上生產禁用)和bgsave(預設)

save在主程式中執行會阻塞當前redis伺服器直到持久化工作完成,執行save命令期間,redis不能處理其他命令,非常嚴重的問題,線上禁止使用
bgsave命令會在後臺非同步進行快照操作,這個操作是fork(即產生一個和父程序完全相同的子程序)出一個子程序在後臺完成的不阻塞,快照同時還可以響應使用者端請求。

4. RDB的優勢與缺點:

4.1 優勢:

1)適合大規模的資料恢復
2)適合按照業務定時備份
3)對資料完整性和一致性不高
4)RDB檔案在記憶體中的載入速度比AOF快得多

4.2 缺點:

1)在一定時間間隔內做備份,如果redis意外發生宕機,如斷電,則會丟失當前至最近一次快照之間的資料
具體實踐參考https://www.bilibili.com/video/BV13R4y1v7sP?p=33&vd_source=a579082d717747b1e99fe189207e7c29
2)RDB需要經常fork出一個子程序在磁碟上持久化,如果資料量很大則會導致I/O嚴重影響伺服器效能

5. 檢查修復dump.rdb檔案:

在rdb檔案遷移或者寫入過程中都有可能發生資料損壞,這些資料損壞很可能使整個rdb檔案不可用,所以需要嘗試檢查並修復。
先進入/usr/local/redis/bin,使用裡面的redis-check-rdb進行rdb檔案檢查修復:

修復成功:

如果修復不了,那隻能自認倒黴了。。。

6. RDB快照禁用:

1)redis-cli set save ""
2) 修改組態檔:save 5 2 --> save "" (推薦)