勵志

勵志人生知識庫

持久化方法

Redis提供了兩種持久化的方式,分別是RDB(Redis DataBase)和AOF(Append Only File)。

RDB方式是一種快照式的持久化方法,它將某一時刻的數據持久化到磁碟中。在數據持久化的過程中,Redis會先將數據寫入到一個臨時檔案中,待持久化過程都結束了,才會用這個臨時檔案替換上次持久化好的檔案。這種特性讓我們可以隨時來進行備份,因為快照檔案總是完整可用的。對於RDB方式,Redis會單獨創建(fork)一個子進程來進行持久化,而主進程是不會進行任何IO操作的,這樣就確保了Redis極高的性能。如果需要進行大規模數據的恢復,且對於數據恢復的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。

AOF方式是將執行過的寫指令記錄下來,在數據恢復時按照從前到後的順序再將指令執行一遍。AOF命令以Redis協定追加保存每次寫的操作到檔案末尾。Redis還能對AOF檔案進行後台重寫,使得AOF檔案的體積不至於過大。默認的AOF持久化策略是每秒鐘fsync一次,因為在這種情況下,Redis仍然可以保持很好的處理性能,即使Redis故障,也只會丟失最近1秒鐘的數據。

因為在追加方式下,如果不做任何處理的話,AOF檔案會變得越來越大,為此,Redis提供了AOF檔案重寫(rewrite)機制,即當AOF檔案的大小超過所設定的閾值時,Redis就會啟動AOF檔案的內容壓縮,只保留可以恢復數據的最小指令集。在進行AOF重寫時,仍然是採用先寫臨時檔案,全部完成後再替換的流程,所以斷電、磁碟滿等問題都不會影響AOF檔案的可用性。