前言
Redis 提供了 2 個不同形式的持久化方式:
-
RDB(Redis DataBase)
-
AOF(Append Of File)
RDB
在指定的時間間隔內
將記憶體中的資料集快照寫入磁盤, 也就是行話講的 Snapshot 快照,它恢復時是將快照檔案直接讀到記憶體里,
備份是如何執行的
Redis 會單獨創建(fork)一個子行程來進行持久化,首先會將資料寫入到一個臨時檔案中,待持久化程序都結束了,再用這個臨時檔案替換上次持久化好的檔案,整個程序中,主行程是不進行任何 IO 操作的,這就確保了極高的性能,如果需要進行大規模資料的恢復,且對于資料恢復的完整性不是非常敏感,那 RDB 方式要比 AOF 方式更加的高效,RDB 的缺點是最后一次持久化后的資料可能丟失
,
Fork
-
Fork 的作用是復制一個與當前行程一樣的行程,新行程的所有資料(變數、環境變數、程式計數器等) 數值都和原行程一致,但是是一個全新的行程,并作為原行程的子行程,
-
在 Linux 程式中,fork () 會產生一個和父行程完全相同的子行程,但子行程在此后多會 exec 系統呼叫,出于效率考慮,Linux 中引入了
“寫時復制技術”
, -
一般情況父行程和子行程會共用同一段物理記憶體,只有行程空間的各段的內容要發生變化時,才會將父行程的內容復制一份給子行程,
RDB 持久化流程

dump.rdb 檔案
rdb的默認組態檔名稱為dump.rdb
rdb檔案的保存路徑,默認為 Redis 啟動時命令列所在的目錄下 “dir ./
”,也可以自己修改
如何觸發 RDB 快照-根據配置的策略
默認的配置策略如下圖:
舉例:save 60 10000
,意思是在60s內生成了10000個key,那么redis就會以rbd的方式持久化資料,會先將資料保存在臨時檔案中,然后用臨時檔案替換掉當前的dump.rdb
命令 save VS bgsave
上面的例子使用的是save保存方式,redis中更推薦bgsave保存方式
-
save :save 時只管保存,其它不管,全部阻塞,手動保存,不建議,
-
bgsave:Redis 會在后臺異步進行快照操作, 快照同時還可以回應客戶端請求,
-
可以通過 lastsave 命令獲取最后一次成功執行快照的時間,
rdb持久化的優勢
-
適合大規模的資料恢復
-
對資料完整性和一致性要求不高更適合使用
-
節省磁盤空間
-
恢復速度快

rdb持久化的劣勢
-
Fork 的時候,記憶體中的資料被克隆了一份,大致 2 倍的膨脹性需要考慮,
-
雖然 Redis 在 fork 時使用了寫時拷貝技術,但是如果資料龐大時還是比較消耗性能,
-
在備份周期在一定間隔時間做一次備份,所以如果 Redis 意外 down 掉的話,就會丟失最后一次快照后的所有修改,
總結

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/545373.html
標籤:NoSQL
上一篇:MySQL學習筆記-約束
下一篇:oracle 口令檔案引數檔案