您好,登錄后才能下訂單哦!
Redis6.x持久化之AOF的示例分析,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
默認的AOF持久化策略是每秒鐘fsync一次,fsync是指把緩存中的寫指令記錄到磁盤中,在這種情況下,Redis仍可以保持很高的性能。
當然由于OS會在內核中緩存 write做的修改,所以可能不是立即寫到磁盤上。這樣aof方式的持久化也還是有可能會丟失部分修改。不過可以通過配置文件告訴Redis,想要通過fsync函數強制os寫入到磁盤的時機。
AOF方式在同等數據規模的情況下,AOF文件要比RDB文件的體積大,因此AOF方式的恢復速度也要慢于RDB方式。
AOF優點:
更好的保護數據不丟失 、性能高、可做緊急恢復
AOF缺點:
文件比RDB文件大、寫的QPS比RDB低
1:appendonly:是否開啟AOF
2:appendfilename:設置AOF的日志文件名
3:appendfsync:設置AOF日志如何同步到磁盤,fsync()調用,用來告訴操作系統立即將緩存的指令寫入磁盤,有三個選項:
(1)always:每次寫都強制調用fsync,這種模式下,redis會相對較慢,但數據最安全 (2)everysec:每秒啟用一次fsync (3)no:不調用fsync()。而是讓操作系統自行決定sync的時間。這種模式下,redis的性能會最快
4:no-appendfsync-on-rewrite:設置當redis在rewrite的時候,是否允許appendsync。因為redis進程在進行AOF重寫的時候,fsync()在主進程中的調用會被阻止,也就是redis的持久化功能暫時失效。默認為no,這樣能保證數據安全
5:auto-aof-rewrite-min-size:設置一個最小大小,是為了防止在aof很小時就觸發重寫
6:auto-aof-rewrite-percentage:設置自動進行AOF重寫的基準值,也就是重寫啟動時的AOF文件大小,假如redis自啟動至今還沒有進行過重寫,那么啟動時aof文件的大小會被作為基準值。這個基準值會和當前的aof大小進行比較。如果當前aof大小超出所設置的增長比例,則會觸發重寫。如果設置auto-aof-rewrite-percentage為0,則會關閉此重寫功能
如果在追加日志時,恰好遇到磁盤空間滿或斷電等情況,導致日志寫入不完整,也沒有關系,Redis提供了redis-check-aof工具,可以用來進行日志修復,基本步驟如下:
1:備份被寫壞的AOF文件 2:運行redis-check-aof –fix進行修復 3:用diff -u來看下兩個文件的差異,確認問題點 4:重啟redis,加載修復后的AOF文件
AOF采用文件追加方式,這會導致AOF文件越來越大.
為此,Redis提供了AOF文件重寫(rewrite)機制,即當AOF文件的大小超過所設定的閾值時,Redis就會啟動AOF文件的內容壓縮,只保留可以恢復數據的最小指令集。
可以使用命令bgrewriteaof
Redis是這樣工作的:
Redis會記錄上次重寫時的AOF大小。
假如自啟動至今還沒有進行過重寫,那么啟動時AOF文件的大小會被作為基準值,這個基準值會和當前的AOF大小進行比較,如果當前AOF大小超出所設置的增長比例,則會觸發重寫。
另外,你還需要設置一個最小大小,是為了防止在AOF很小時就觸發重寫
1:在重寫開始前,redis會創建一個“重寫子進程”,這個子進程會讀取現有的AOF文件,并將其包含的指令進行分析壓縮并寫入到一個臨時文件中。
2:與此同時,主進程會將新接收到的寫指令一邊累積到內存緩沖區中,一邊繼續寫入到原有的AOF文件中,這樣做是保證原有的AOF文件的可用性,避免在重寫過程中出現意外。
3:當“重寫子進程”完成重寫工作后,它會給父進程發一個信號,父進程收到信號后就會將內存中緩存的寫指令追加到新AOF文件中
4:當追加結束后,redis就會用新AOF文件來代替舊AOF文件,之后再有新的寫指令,就都會追加到新的AOF文件中
5:重寫aof文件的操作,并沒有讀取舊的aof文件,而是將整個內存中的數據庫內容用命令的方式重寫了一個新的aof文件,這點和快照有點類似
RDB+AOF的混合方式是:先使用RDB進行快照存儲,然后使用AOF持久化記錄所有的寫操作,當重寫策略滿足或手動觸發重寫的時候,將最新的數據存儲為新的RDB記錄。
這樣的話,重啟服務的時候會從RDB和AOF兩部分恢復數據,既保證了數據完整性,又提高了恢復數據的性能。
開啟混合方式:
設置aof-use-rdb-preamble的值為 yes
1:判斷是否開啟AOF持久化,若開啟了AOF,則使用AOF持久化文件恢復數據 2:如果AOF文件不存在,否則使用RDB持久化文件恢復數據 3:如果AOF文件和RDB文件都不存在則直接啟動Redis 4:如果AOF或RDB文件出現錯誤,則啟動失敗返回錯誤信息
關于Redis6.x持久化之AOF的示例分析問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。