,它
只許追加檔案但不可以改寫檔案。換言之,redis重啟的話就根據日誌檔案的內容將寫指令從前到後執行一次以完成資料的恢復工作。
注意:如果rdb和aof兩種方式都開啟的話,redis會優先使用aof的方式,因為aop的持久化檔案更加完整。
⑤、auto-aof-rewrite-percentage:預設值為100。aof自動重寫配置,當目前aof檔案大小超過上一次重寫的aof檔案大小的百分之多少進行重寫,即當aof檔案增長到一定大小的時候,redis能夠呼叫bgrewriteaof對日誌檔案進行重寫。當前aof檔案大小是上次日誌重寫得到aof檔案大小的二倍(設定為100)時,自動啟動新的日誌重寫過程。
⑥、auto-aof-rewrite-min-size:64mb。設定允許重寫的最小aof檔案大小,避免了達到約定百分比但尺寸仍然很小的情況還要重寫。
⑦、aof-load-truncated:aof檔案可能在尾部是不完整的,當redis啟動的時候,aof檔案的資料被載入記憶體。重啟可能發生在redis所在的主機作業系統宕機後,尤其在ext4檔案系統沒有加上data=ordered選項,出現這種現象 redis宕機或者異常終止不會造成尾部不完整現象,可以選擇讓redis退出,或者匯入盡可能多的資料。如果選擇的是yes,當截斷的aof檔案被匯入的時候,會自動發布乙個log給客戶端然後load。如果是no,使用者必須手動redis-check-aof修復aof檔案才可以。預設值為 yes。
使用bgrewriteaof命令:redis主程序fork子程序來執行aof重寫,這個子程序建立新的aof檔案來儲存重寫結果,防止影響舊檔案。因為fork採用了寫時複製機制,子程序不能訪問在其被建立出來之後產生的新資料。redis使用「aof重寫緩衝區」儲存這部分新資料,最後父程序將aof重寫緩衝區的資料寫入新的aof檔案中然後使用新aof檔案替換老檔案。
①、為什麼重寫
由於aof持久化是redis不斷將寫命令記錄到 aof 檔案中,aof 的檔案會越來越大,占用伺服器記憶體越大以及 aof 恢復要求時間越長。為了解決這個問題,redis新增了重寫機制,當aof檔案的大小超過所設定的閾值時,redis就會啟動aof檔案的內容壓縮,只保留可以恢復資料的最小指令集。可以向 redis 傳送 bgrewriteaof 命令,這個命令會移除 aof 檔案中冗餘的命令來重寫 aof 檔案,使 aof 檔案的體積變得盡可能地小。實際上 aof 檔案重寫並不需要對現有的 aof 檔案進行任何讀取、分析或者寫入操作,這個功能是根據通過讀取伺服器當前資料庫狀態實現的。
②、重寫(rewrite)原理
來自:徹底搞懂redis持久化之aof原理
aof重寫--對比下面兩組命令:
兩組命令執行後對於count來說最終的值是一致的,但是進行aof重寫後省略了中間過程,可以讓aof檔案體積更小。
aof 檔案重寫觸發機制:
①、手動重寫:
②、自動重寫:在redis.conf 配置檔案中修改
也就是說預設redis會記錄上次重寫時的aof大小,預設配置是當aof檔案大小是上次rewrite後大小的一倍且檔案大於64m時觸發。實際工作中不要進行頻繁的aof重寫,因為cpu資源和硬碟資源二者之間肯定是cpu資源更加寶貴,所以不應該過多耗費cpu效能去節省硬碟空間。
當 redis 需要以 aof的形式持久化檔案時, 伺服器執行以下操作:
所有的寫入命令追加到aof緩衝區
定期對aof檔案進行重寫
redis重啟時,可以載入aof檔案進行資料恢復
然後重啟redis服務。
最後我們開啟redis的客戶新增一些資料。
接下來看一下aof檔案:
--優點
--缺點
正常恢復:將有資料的aof檔案複製乙份儲存到對應目錄(config get dir),重啟 redis 之後就會進行 aof 檔案的載入。
一般來說, 如果對資料的安全性要求非常高的話,你應該同時使用兩種持久化功能。
如果你非常關心你的資料, 但仍然可以承受數分鐘以內的資料丟失, 那麼你可以只使用 rdb 持久化。
有很多使用者都只使用 aof 持久化, 但我們並不推薦這種方式: 因為定時生成 rdb 快照(snapshot)非常便於進行資料庫備份, 並且rdb 恢復資料集的速度也要比 aof 恢復的速度要快, 除此之外, 使用 rdb 還可以避免之前提到的 aof 程式的 bug 。
這個功能是redis4.0之後才支援。使用rdb-aof混合持久化的優缺點如下:
1--優點:
混合持久化結合了rdb持久化 和 aof 持久化的優點,採取了rdb的檔案小易於災難恢復,同時結合aof,增量的資料以aof方式儲存了,資料更少的丟失。
2--缺點:
相容性差,一旦開啟了混合持久化,在4.0之前版本都不識別該aof檔案,同時由於前部分是rdb格式,需要專業的工具來閱讀,因為是二進位制,所以閱讀性較差。
3--原理(先掌握rdb和aop方式):
混合持久化也是通過bgrewriteaof完成的,所以基本流程和上述一樣。不同的是當開啟混合模式時,fork出的子程序先將共享的記憶體副本全量以rdb的方式寫入aof。這樣提高了速度也極大的縮小了aof檔案(畢竟都是二進位制)。寫完還是通知主程序,然後再將重寫緩衝區的內容以aof方式寫入到檔案,然後替換舊的aof檔案。也就是說這種模式下的aof檔案發生rewrite後前半部分是rdb格式(redis開頭的二進位制資料),後半部分是正常的aof追加的命令(重寫緩衝區裡的)。
4--二者混用資料恢復優先選擇誰:
會優先看是否存在aof檔案,若存在則先按照aof檔案恢復,因為aof畢竟比rdb全。若aof不存在,則才會查詢rdb是否存在。這是預設的機制。畢竟aof檔案也rewrite成rdb二進位制格式,檔案小,易於回覆。所以redis會優先採取aof。
搞懂redis rdb和aof持久化及工作原理
徹底搞懂redis持久化之aof原理
redis持久化之AOF持久化
aof與rdb持久化通過儲存資料庫中的鍵值對來記錄資料庫狀態不同,aof持久化是通過儲存redis伺服器所執行的寫命令來記錄資料庫狀態的。被寫入aof檔案的所有命令都是以redis的命令請求協議格式儲存的。當aof持久化功能處於開啟狀態,伺服器在執行完乙個寫命令之後,會以協議格式將被執行的寫命令追加...
redis持久化之AOF
號外號外,新建 redis 交流討論群 332160890,歡迎加入!一 說明 1.1aof 相關配置項 配置項作用aof rewrite perc 百分比閾值,當 aof的增量超過這個閾值時,開始 aof的 rewrite操作 aof rewrite min size 當aof 的檔案大小超過該值...
Redis持久化之AOF
aof是redis的另一種持久化方式。什麼是aof?aof的實現原理 aof相關配置 redis的配置檔案 配置檔案的第934行 everysec 將aof buf快取區的所有內容寫入到aof檔案,如果上次同步aof檔案的時間與當前時間大於1秒,那麼會再次對aof檔案進行同步,同步操作由乙個執行緒專...