AOF數據持久化
AOF<二進制文件>比RDB方式有更好的持久性。
redis會將每一個收到的寫命令都通過write函數追加到文件最後,類似msyql的binlog。
當redis重啟時,會通過重新執行文件中保存的寫命令來在內存中重建整個數據庫的內容。
優點:可以保持更高的數據完整性。
如果設置追加file的時間是1s,那麽redis發生故障,最多會丟失1s的數據;
如果日誌寫入不完整,支持redis-check-aof來進行日誌修復;
AOF文件沒被rewrite之前(文件過大時會對命令進行合並重寫),
可以刪除其中的某些命令(比如誤操作的flushall)。
缺點:AOF文件比RDB文件大,且恢復速度慢。
AOF默認關閉。
配置文件相關參數:
appendonly yes
appendfilename "" #AOF保存的文件名
同步方式相關的配置:
appendfsync always #一旦插入命令,立即同步到磁盤,完全的持久化,但是速度慢,不推薦
appendfsync everysec #AOF每秒進行同步
appendfsync no #不自動同步,性能最好,但是持久化沒有保證
存儲過程:
將快照內容以命令的形式追加到AOF文件中,
所以隨著追加,AOF文件會越來越大,保存的AOF文件存儲了執行的所有命令,
所以可以進行修改文件來撤銷輸錯的命令(在重寫之前,如果重寫了就沒有辦法了)
對AOF文件進行重寫:(解決AOF文件越來越大的問題)
redis-cli -h ip -p port bgrewriteaof
重寫命令的操作過程:
在當前的快照保存結束後,開啟一個子進程,將AOF文件進行重寫,
合並set命令等操作到一個臨時文件,達到縮小文件大小的目的。
重寫結束後,將臨時文件替換為新的AOF文件。
(重寫過程中如果有新的redis操作命令,會提交到緩存中,重寫結束後追加到AOF文件內)
說明:redis2.4以上版本,重寫機制自動觸發。觸發的相關redis.conf配置如下:
auto-aof-rewrite-percentage 100
當目前的AOF文件大小超過上一次重寫文件大小的百分之幾時進行重寫,
如果沒有重啟過,則以啟動時的AOF文件大小為依據)
auto-aof-rewrite-min-size 64mb(允許重寫的最小AOF文件大小);
數據恢復:
重啟redis服務,前提是配置文件必須設置了appendonly yes,然後會從appendfile的文件加載文件。
反之是從RDB中加載數據的。
AOF數據持久化