AOF:Append Only File
以io順序把操作的寫指令追加到指定的檔案末尾(缺點:檔案有可能會變的越來越大)
記錄每一次寫操作至指定的檔案尾部實作持久化;
當redis重新開機時,可通過重新執行檔案中的指令在記憶體中重建資料庫
redis能夠合并重寫aof的持久化檔案,使用bgrewriteaof配置指令實作
bgrewriteaof --> aof檔案重寫;
不會讀取正在使用的aof檔案,而通過将記憶體中的資料以指令的方式儲存到臨時檔案中,完成之後替換原來的aof檔案
通過bgrewriteaof重寫,将aof檔案變小,來彌補aof的缺點
重建aof檔案過程(bgrewriteaof):
(1)redis主程序通過調用fork建立子程序
(2)子程序根據redis記憶體中的資料建立資料庫重建指令序列于臨時檔案中
(3)父程序繼續接收client的請求,并會把這些請求中的寫操作繼續追加至原來的AOF檔案;額外地,這些新的寫請求還會被放置于一個緩沖隊列中;
(4)子程序重寫完成,會通知父程序;父程序把緩沖中的指令寫到臨時檔案中
(5)父程序用臨時檔案替換老的aof檔案;
相關參數:
appendonly no:不啟用aof持久化,預設為no,即關閉的
appendfilename “appendonly.aof”:如果啟用aof,則儲存的檔案名用這個參數設定
appendfsync always |everysec |no
always:每次收到寫指令就立即寫到磁盤中的aof檔案中
everysec:每秒寫1次,不管收到多少寫請求(一般都用這種方式)
no:不主動寫到磁盤中,由系統自已決定什麼寫
主動觸發aof檔案重寫相關參數:
no-appendfsync-on-rewrite no:
在rewrite期間,不将新寫請求同步到磁盤,僅放于記憶體的緩沖隊列當中;
建議為yes,可以預防在重寫期間redis崩潰導緻資料丢失;
auto-aof-rewrite-percentage 100:
目前aof檔案大小是上次重寫時aof檔案的2倍時,進行bgrewriteaof重寫;
auto-aof-rewrite-min-size 64mb:
啟動bgrewriteaof重寫的最小值,即當此aof達到此最小值才進行重寫;
手動觸發aof檔案重寫相關參數:
在redis-cli指令行,輸入bgwriteaof即可
注意:持久化本身不能取代備份:還應該制定備份政策,對redis資料庫定期進行備份
RDB與AOF同時啟用時:
1.BGSAVE和BGREWRITEAOF不會同時執行;
2.在redis伺服器啟動用于恢複資料時,會優先使用AOF;
本文轉自激情燃燒的歲月部落格51CTO部落格,原文連結http://blog.51cto.com/liuzhengwei521/1931469如需轉載請自行聯系原作者
weilovepan520