RDB持久化是把當前進程數據生成快照保存到硬盤的過程,觸發機制有手動和自動。redis
RDB是一個壓縮的二進制文件按,是某一個時間點上的數據快照,適合備份、全量複製,比較適用於災難恢復。redis加載RDB恢復數據遠遠快於AOF的方式。服務器
RDB沒有辦法作到實時持久化(秒級),bgsave每次運行執行fork建立子進程,屬於重量級操做,頻繁執行成本高。流程以下:markdown
一、save:redis 127.0.0.1:6379> SAVE
阻塞當前的redis服務器,直到RBD完成位置,對於內存較大的實例影響時間較長
二、bgsave:redis 127.0.0.1:6379> BGSAVE
redis進程執行fork建立子進程,RDB持久化有子進程負責,完成後自動結束,阻塞只發生在fork階段,時間極短
複製代碼
一、使用save的相關配置,如:「save m n 」,表示M秒內數據集存在N次修正,會自動觸發
二、執行debug reload命令從新加載redis時,會觸發
三、默認狀況下執行shotdown時,若是沒有開啓AOF,會觸發
複製代碼
AOF以獨立日誌的方式記錄每一次的些命令,重啓時執行AOF文件,主要解決數據持久化的實時性。流程以下:spa
隨着命令不斷寫入AOF,文件會愈來愈大,redis引入AOF重寫機制壓縮文件。AOF文件重寫是把redis進程內的數據轉化爲寫命令同步到新的AOF文件的過程。debug
文件變小的緣由日誌
進程內超時的數據再也不寫入文件code
舊的AOF文件內無效的命令,新生成的文件只保留最終寫入數據的命令orm
多條命令合併爲一個命令進程
AOF和RDB均可以用於服務器重啓時的數據恢復。其持久化文件加載流程以下:內存
文件的校驗
當加載損壞的AOF文件時,會拒絕啓動。
當加載錯誤格式的AOF文件時,會先備份,而後進行自動修復。
當機器忽然掉電致使文件不完整,redis會兼容這種狀況(aof-load-truncated)