redis持久化之AOF

weixin_33858249發表於2017-11-20

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

相關文章