首頁  >  文章  >  資料庫  >  Redis持久化之AOF方式

Redis持久化之AOF方式

齐天大圣
齐天大圣原創
2020-05-22 09:49:051920瀏覽

Redis的RDB方式無法做到妙計持久化,但是AOF方式可以做到。如果資料比較重要,遺失會造成嚴重的後果,那麼RDB方式明顯不合適,要用到AOF的方式。 aof方式和mysql的binlog日誌有些像,都只記錄新增、修改、刪除的操作。不同的是,redis會每隔一段時間後,就會對aof檔案進行重寫,並降低aof檔案的大小。

AOF工作流程

這裡,為什麼指令要先寫入aof_buf,因為如果直接寫入aof文件,那麼效能就完全取決去硬碟的io性能。寫入aof_buf是為了提高寫入的效能。

配置

appendonly:是否開啟aof持久化方式,預設為no。如想開啟則改為yes。

dir:aof檔案存放目錄

appendfilename:aof檔案名稱

appendfsync:aof同步方式,有三個值,分別如下:

  • #always:每寫入一個命令時就同步,資料的安全性最高,但效能差

  • everysec:每秒同步,預設的方式,效能高,安全性也還行

  • no:同步操作交給作業系統,資料的安全性最差。

auto-aof-rewrite-percentage 、auto-aof-rewrite-min-size 這兩個配置是和aof重寫機制相關的,只有同時滿足這兩個條件才會觸發重寫機制。

auto-aof-rewrite-min-size是表示重寫時,檔案大小必須必這個值要大,預設值是64mb

auto-aof-rewrite-percentage表示目前文件大小比上次重寫後的檔案大小大這麼多才行。

AOF重寫

redis的aof重寫機制有手動觸發和自動觸發兩種方式。手動觸發即輸入bgrewriteof指令。自動觸發即滿足上述所有的兩個條件。

為什麼重寫能縮小檔案體積,有幾種情況:

  • 過期的鍵及已刪除的鍵將不會再記錄

  • #許多單一操作可以有一個操作來完成,例如lpush a、lpush b,重寫後就是lpush a b.

下面看看aof重寫流程

Redis持久化之AOF方式

  1. 執行bgrewriteof指令

  2. 主程式fork出一個子程序

  3. 原有的aof機制繼續運作,同時,也將新的指令寫入到aof_rewrite_buf中

  4. 子程式產生新的aof檔

  5. #通知父流程,新的aof檔案已經產生成功;將aof_rewrite_buf中的指令追加到新的aof檔案;用新的aof檔案取代舊的aof檔案。

  6. 完成上述步驟後,aof重寫就完成了。

注意,如果一個伺服器上面有多個redis服務,那麼最好將他們重寫的時間分隔開,防止io及cpu競爭過大。

以上是Redis持久化之AOF方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn