一、是什麼
在指定的時間內將內存中的數據集快照寫入磁盤,也就是Snapshot快照,它恢復時是將快照文件直接讀到內存中。
Redis會單獨創建(fork)一個子進程來進行持久化,會先將數據寫入到一個臨時文件中,待持久化過程都結束,再用這個臨時文件替換上次持久化的文件,整個過程中,主進程時不進行任何IO操作的,這就是確保了極高的性能,如果需要進行大規模數據的恢復,且對於數據的完整性不是非常敏感,那RDB方式比AOF方式更加高效,RDB的缺點是最後一次持久化的數據可能丟失。
二、Fork
Fork的作用是複製一個與當前進程一樣的進程。新進程的所有數據(變量、環境變量、程序計數器等)數值都與原進程一致,但是是一個全新的進程,並作爲原進程的子進程。
三、dump.rdb文件
- 配置
這是我的配置路徑 -
如何觸發RDB快照
save 900 1 // 900秒內有1次改動,則持久化一次 save 300 10 // 300秒內有10次改動,則持久化一次 save 60 10000 // 60秒內有10000次改動,則持久化一次
以上三個任意滿足一個條件即可
save 或bgsave命令
執行flushall命令也會產生rdb文件,不過是空的,無意義
四、優勢與劣勢
- 優勢
適合大規模的數據恢復
對數據完整性和一致性要求不高 - 劣勢
在一定間隔時間做一次備份,所以如果redis意外down的話,就會丟失最後一次快照後的所有修改。
Fork的時候,內存中的數據被克隆了一份,大致2倍的膨脹性需要考慮。