AOF是以日誌的形式來記錄每個寫操作,將Redis執行過的所有寫指令記錄下來(讀操作不記錄),只許追加文件但不可以改寫文件,redis啓動之初會讀取改文件重新構架數據,換言之,redis重啓的話就根據日誌文件的內容將寫指令從前到後執行一次以完成數據的恢復工作。
1.默認情況下
appendonly是no,開啓需要設置爲yes
2.appendfilename後綴爲.aof
3.appendfsync:
always:同步持久化 每次發生數據變更會被立即記錄到磁盤,性能較差單數據完整性比較好
everysec: 出廠默認推薦,異步操作,每秒記錄 ,如果一秒內宕機,有數據丟失
No:
4.no-appendfsync-no-rewrite:重寫時是否可以運用apppendfsync,用默認no即可,保證數據安全性。
auto-aof-rewrite-min-size:設置重寫的基準值
auto-aof-rewrite-percentage:設置重寫的基準值
4.AOF正常恢復:
修改默認的appendonly no,改爲yes
將有數據的aof文件複製一份保存到對應的目錄(config get dir)
恢復:重啓redis然後重新加載
異常恢復:
修改默認的appendonly no,改爲yes
備份被寫壞的AOF文件
修復:Redis-check-aof --fix 進行修復
恢復:重啓redis然後重新加載
rewrite:
AOF採用文件追加大小,文件會越來越大爲避免出現將此種情況,新增了重寫機制,當AOF文件的大小超過所設定的閥值時,Redis就會啓動AOF文件的內容壓縮,只保留可以恢復數據的最小指令集,可以使用命令bgrewriteaof
重寫原理
AOF文件持續增長而過大時,會fork出一條新進程來將文件重寫(也是先寫臨時文件最後在rename),遍歷新進程的內存中數據,每條記錄有一條的set語句。重寫aof文件的操作,並沒有讀取舊的aof文件,而是將整個內存中的數據庫內容用用命令的方式重寫了一個新的aof文件,這點和快照有點類似
觸發機制:
Redis會記錄上次重寫時的AOF大小,默認配置是當AOF文件大小是上次rewrite後大小的一倍且文件大於64M時觸發
總結
AOF文件時一個只進行追加的日誌文件
Redis可以在aof文件體積變得過大時,自動地在後臺對AOF進行重寫
AOF文件有序地保存了對數據庫執行的所有寫入操作,這些寫入操作以redis協議的格式保存,因此aof文件的內容非常容易被人讀懂,對文件進行分析也很輕鬆
對於相同數據集來說,aof文件的體積通常大於rdb文件的體積
根據所使用的fsync策略,aof的速度可能會慢於rdb