一、是什麼
以日誌的形式來記錄每個寫操作
,將Redis執行過的所有寫指令記錄下來(讀操作不記錄),只許追加文件但不可以寫文件,redis啓動之初會讀取該文件重新構建數據,換言之,redis重啓的話就會根據日誌文件的內容將寫指令從前到後執行一次以完成數據的恢復工作。
二、appendonly.aof 文件
- 配置
默認關閉,開啓appendonly yes
- 優先級
同時開啓了rdb和aof兩種模式,aof優先
三、AOF啓動/修復/恢復
- 正常恢復
啓動:設置Yes
將數據的aof文件複製一份保存到對應的目錄
恢復:重啓redis然後重新加載 - 異常恢復
啓動:設置Yes
備份被寫壞的AOF文件
修復:Redis-check-aof --fix 進行修復
恢復:重啓redis然後重新加載
四、Rewrite
- 是什麼
AOF採用文件追加方式,文件會越來越大爲避免出現此種情況,新增了重寫機制,當AOF文件的大小超過所設定的閥值時,Redis就會啓動AOF文件的內容壓縮,只保留可以恢復數據的最小指令集,可以使用命令bgrewriteaof#appendfsync always // 每次數據變更會被立即記錄到磁盤,性能差數據保存完整
appendfsync everysec // 出廠默認設置,異步操作,每秒記錄,一秒宕機會丟失數據
#appendfsync no
- 重寫原理
AOF文件持續增長而過大時,會fork出一條新進程來將文件重寫(也是先寫臨時文件最後再rename),遍歷新進程的內存中數據,每條記錄有一條Set語句。重寫aof文件的操作,並沒有讀取舊的aof文件,而是將整個內存中的數據內容用命令的方式重寫了一個新的aof文件,這點和快照有點類似 - 觸發機制
Redis會記錄上次重寫時的AOF大小,默認配置是當AOF文件大小是上次rewrite後大小的一倍,且文件大於64M時觸發auto-aof-rewrite-percentage 100 // 設置重寫的基準值
auto-aof-rewrite-min-size 64mb // 設置重寫的基準值