redis的AOF持久化配置
阿新 • • 發佈:2018-11-22
1.AOF持久化配置
AOF持久化,預設是關閉的,預設開啟的持久化配置是RDB
在redis.config配置appendonly yes ,可以開啟AOF持久化
在生產環境中,一般來說AOF是要開啟的,除非對一兩分鐘
沒有影響。
開啟AOF機制之後,redis沒收到一次寫命令,就會寫入到
日誌檔案中,當然現寫入到OS cache 中,然後每隔一定的時間
在fsync一下,把命令寫入到磁碟 中。
如果AOF和RDB都開啟了,redis 重啟的時候,會優先通過
AOF進行資料恢復的,因為AOF資料比較完整。
AOF有三種fsync策略:
always:每次寫入一條資料,立即將這個資料fsync寫到磁碟上去(效能很差)
everysec:每秒將os cache記憶體中的資料fsync到磁碟(生產環境使用這個策略,QPS能達到上萬)
no : 僅僅將資料寫入到os cache就撒手不管了,os 會根據自己的策略把資料寫入到磁碟,不可控
AOF的rewrite,redis中的資料是有限的,很多資料會自動過期,也可能會被使用者刪掉,可能會被redis用快取清楚的演算法清楚掉。
AOF會自動每隔一定的時間,做rewrite操作。
rewrite過程:
(1)redis fork一個子程序
(2)子程序基於當前記憶體中的資料,構建日誌,開始往一個新的臨時的AOF檔案中寫入日誌
(3)redis主程序,接收到client新的寫操作之後,在記憶體中寫入日誌,同時新的日誌也繼續寫入舊的AOF檔案
(4)子程序寫完新的日誌檔案之後,redis主程序將記憶體中的新日誌再次追加到新的AOF檔案中
(5)用新的日誌檔案替換掉舊的日誌檔案