1. 程式人生 > >redis中aof備份策略中的配置引數

redis中aof備份策略中的配置引數

在使用redis時,都會配置相應的儲存策略,以保證redis並不會由於意外掛掉,在短時間內重啟時資料不會消失。在當前的版本中,redis提供了bgsave和aof兩種策略,本文主要描述了aof中的相關引數以及為什麼這樣是可以足夠安全的。本文的描述主要參考redis的conf檔案以及各項網路

appendonly

開啟aof特性,這個控制是否啟用aof.

appendfilename

寫入檔案的檔名。開啟aof之後,每條命令(除讀之外的命令),均會寫入到檔案中,這裡即實際寫入的檔案.

appendfsync

寫入策略,預設值everysec,每秒寫一次(呼叫flush)。另外兩個值,always | no,分別表示每次redis寫命令之外就寫檔案,和由作業系統保證。always對硬碟壓力大,everysec是一個平衡值,no對硬碟壓力最小,但排程由系統控制,丟失資料風險最大.

no-appendfsync-on-rewrite

是否在後臺寫時同步單寫,預設值no(表示需要同步).這裡的後臺寫,表示後臺正在重寫檔案(包括bgsave和bgrewriteaof.bgrewriteaof網上很多資料都沒有涉及到。其實關掉bgsave之後,主要的即是aof重寫檔案了).no表示新的主程序的set操作會被阻塞掉,而yes表示新的主程序的set不會被阻塞,待整個後臺寫完成之後再將這部分set操作同步到aof檔案中。但這可能會存在資料丟失的風險(機率很小),如果對效能有要求,可以設定為yes,僅在後臺寫時會非同步處理命令.

auto-aof-rewrite-percentage

aof檔案增長比例,指當前aof檔案比上次重寫的增長比例大小。aof重寫即在aof檔案在一定大小之後,重新將整個記憶體寫到aof檔案當中,以反映最新的狀態(相當於bgsave)。這樣就避免了,aof檔案過大而實際記憶體資料小的問題(頻繁修改資料問題).

auto-aof-rewrite-min-size

aof檔案重寫最小的檔案大小,即最開始aof檔案必須要達到這個檔案時才觸發,後面的每次重寫就不會根據這個變量了(根據上一次重寫完成之後的大小).此變數僅初始化啟動redis有效.如果是redis恢復時,則lastSize等於初始aof檔案大小.

aof-load-truncated

指redis在恢復時,會忽略最後一條可能存在問題的指令。預設值yes。即在aof寫入時,可能存在指令寫錯的問題(突然斷電,寫了一半),這種情況下,yes會log並繼續,而no會直接恢復失敗.

Linux核心引數

另外,與aof重寫相關的一個linux核心引數即是 overcommit_memory。即在進行重寫時,如何分配子程序記憶體的問題。(重寫是後臺重寫,會分配子程序).預設值為0,建立設定為1,以保證 子程序記憶體能夠分配成功(即使用copyOnWrite記憶體分配策略,在沒有set命令時會和主程序使用同一份記憶體),並且不會判斷當前記憶體是否夠用.