天天看點

redis持久化之AOF

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

上一篇: TAPD