RDB(Redis DataBase):RDB 永續性以指定的時間間隔執行資料集的時間點快照。
說人話:實現類似照片記錄效果的方式,把某一時刻的資料和狀態以檔案的形式寫到磁碟上,也就是快照,恢復時再將硬碟快照檔案直接讀回到記憶體裡。
這樣一來,即使故障宕機,快照檔案也不會丟失,資料的可靠性也就得到了保證。這個快照檔案就稱為RDB檔案(dump.rdb)。
要注意的一點是redis7相比於redis6在快照的時間間隔上和修改頻次是變化較大的
預設路徑為:/usr/local/redis
修改為:
解決方法是dir /myredis/dumpfiles 改成 dir ./myredis/dumpfiles
預設檔名:
修改為:
修改成功:
5秒鐘修改2次自動觸發(兩個條件都要滿足,即時間間隔大於等於5秒,修改次數大於等於2次)
在啟動服務時,redis自動根據rdb檔案進行備份。
有兩種特殊情況,當執行flushall/flushdb(這種情況生成的rdb檔案即為空,沒有意義)或者退出使用者端,redis自動會生成一個當下最新的rdb檔案。
具體實踐參考https://www.bilibili.com/video/BV13R4y1v7sP?p=31&vd_source=a579082d717747b1e99fe189207e7c29
save在主程式中執行會阻塞當前redis伺服器直到持久化工作完成,執行save命令期間,redis不能處理其他命令,非常嚴重的問題,線上禁止使用。
bgsave命令會在後臺非同步進行快照操作,這個操作是fork(即產生一個和父程序完全相同的子程序)出一個子程序在後臺完成的不阻塞,快照同時還可以響應使用者端請求。
1)適合大規模的資料恢復
2)適合按照業務定時備份
3)對資料完整性和一致性不高
4)RDB檔案在記憶體中的載入速度比AOF快得多
1)在一定時間間隔內做備份,如果redis意外發生宕機,如斷電,則會丟失當前至最近一次快照之間的資料
具體實踐參考https://www.bilibili.com/video/BV13R4y1v7sP?p=33&vd_source=a579082d717747b1e99fe189207e7c29
2)RDB需要經常fork出一個子程序在磁碟上持久化,如果資料量很大則會導致I/O嚴重影響伺服器效能
在rdb檔案遷移或者寫入過程中都有可能發生資料損壞,這些資料損壞很可能使整個rdb檔案不可用,所以需要嘗試檢查並修復。
先進入/usr/local/redis/bin,使用裡面的redis-check-rdb進行rdb檔案檢查修復:
修復成功:
如果修復不了,那隻能自認倒黴了。。。
1)redis-cli set save ""
2) 修改組態檔:save 5 2 --> save "" (推薦)