AOF文件的寫入與同步


在 Redis 中客戶端向服務器發送相關寫命令請求,這時服務器中有個用於處理這些命令的事件循環進程,對這些命令進行處理,並將相關信息處理的結果反饋給客戶端,如:"OK",等。同時,在這個期間,服務器中命令請求器會將相關寫命令追加到 aof_buf 緩沖區和 aof_rewrite_buf 重寫緩沖區。

這個階段服務器進程會處理這三個操作:

(1)執行客戶端的命令。

(2)將執行后的寫命令 append 入 aof_buf 中。

(3)將執行后的寫命令 append 入 aof_rewrite_buf 中。

 圖 1 寫命令追加到緩沖區中

當進行 AOF持久化的時候,對於 aof_buf 中的數據需要寫入並同步到 appendonly.aof 文件中。

圖 2  AOF持久化 

是否將 aof_buf 緩沖區中內容寫入AOF文件中,由 redis.conf 配置文件中的 appendfsync 設置的值來決定,通過 flushAppendFile 函數來進行相關操作。

//事件輪詢函數
def evenloop():
  while True:
       ........
    //是否將 aof_buf 緩沖區中的內容寫入並同步到 appendonly.aof 文件中。
       flushAppendOnlyFile()

 

         appendfsync 選項的值                                          flushAppendOnlyFile 函數的行為
always 將 aof_buf 緩沖區中的所有內容寫入並同步到 AOF 文件中(最安全,但性能差)
everysec 將 aof_buf 緩沖區中的所有內容寫入並同步到 AOF 文件中,如果上次同步 AOF 文件的時間距離現在超過 1 秒鍾,那么會再次對 AOF 文件進行同步。 (安全,性能較好)

no

將 aof_buf 緩沖區中的所有內容寫入並同步到 AOF 文件中,但不對 AOF 文件進行同步,何時進行同步一般有操作系統來決定。(一般為 30 秒,不安全,性能最好)

對於操作系統來說,為了提高對文件的寫入操作,一般都是等緩沖區滿了或者設置了同步時間,才會將內存緩沖區中的數據寫入到磁盤中,完成相關持久化工作。這就可以把寫入操作比作把東西寫到文本中,同步比作保存。如果沒有進行保存,計算機宕機之后,寫入文本中的數據會全部丟失。而對於 Redis 來說,要將緩沖區中的數據同步到 aof 文件中,才能避免 Redis 突然宕機后,進行相關數據信息的恢復操作。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM