AOF文件的寫入與同步

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

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

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

(2)將執行後的寫命令 append 入 aof_buf 中。服務器

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

 圖 1 寫命令追加到緩衝區中函數

 

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

圖 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 文件進行同步。 (安全,性能較好)

noblog

將 aof_buf 緩衝區中的全部內容寫入並同步到 AOF 文件中,但不對 AOF 文件進行同步,什麼時候進行同步通常有操做系統來決定。(通常爲 30 秒,不安全,性能最好)

 

對於操做系統來講,爲了提升對文件的寫入操做,通常都是等緩衝區滿了或者設置了同步時間,纔會將內存緩衝區中的數據寫入到磁盤中,完成相關持久化工做。這就能夠把寫入操做比做把東西寫到文本中,同步比做保存。若是沒有進行保存,計算機宕機以後,寫入文本中的數據會所有丟失。而對於 Redis 來講,要將緩衝區中的數據同步到 aof 文件中,才能避免 Redis 忽然宕機後,進行相關數據信息的恢復操做。

相關文章
相關標籤/搜索