aof持久化,預設是關閉的,預設是開啟rdb持久化
在 redis.conf 檔案,也就是/etc/redis/6379.conf,配置持久化 ,參考 redis搭建實施方案
開啟aof持久化機制之後,redis每次接收到一條寫命令,都會寫入日誌檔案中,當然是先寫入到os cache,然後每隔一定時間再fsync一下
而且即使aof和rdb都開啟了,redis重啟的時候,也是優先通過aof進行資料恢復的,因為aof資料比較完整
每次寫入一條資料就執行一次fsync
always:每次寫入一條資料,立即將這個資料對應的寫日誌fsync到磁碟上去,效能非常非常差,吞吐量很低;如果要確保說redis裡的資料一條都不丟,那就只能這樣了
每隔一秒執行一次fsync
everysec:每秒將os cache中的資料fsync到磁碟,這個最常用的,生產環境一般都這麼配置,效能很高,qps還是可以上萬的
不主動執行fsync
no:僅僅redis負責將資料寫入os cache就不管了,然後後面os自己會時不時由自己的策略將資料刷入磁碟,不可控redis中的資料其實有限的,很多資料可能會自動過期,可能會被使用者刪除,可能會被redis用快取清除的演算法清理掉
redis中的資料會不斷淘汰掉舊的,就一部分常用的資料會被自動保留在redis記憶體中
所以可能很多之前的已經被清理掉的資料,對應的寫日誌還停留在aof中,因為aof日誌檔案就乙個,會不斷的膨脹到很大很大
所以aof會自動在後台每隔一定時間做rewrite操作,比如日誌裡已經存放了針對100w資料的寫日誌了; redis記憶體只剩下10萬; 基於記憶體中當前的10萬資料構建一套最新的日誌到aof中;覆蓋之前的老日誌;確保aof日誌檔案不會過大,保持跟redis記憶體資料量一致
redis 2.4之前,還需要手動開發一些指令碼,crontab,通過bgrewriteaof命令去執行aof rewrite,但是redis 2.4之後會自動進行rewrite操作
在redis.conf中,可以配置rewrite策略
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
比如說上一次aof rewrite之後,是128mb
然後就會接著128mb繼續寫aof的日誌,如果發現增長的比例,超過了之前的100%,256mb,就可能會去觸發一次rewrite
但是此時還要去跟min-size,64mb去比較,256mb > 64mb,才會去觸發rewrite
流程:redis fork乙個子程序
子程序基於當前記憶體中的資料,構建日誌,開始往乙個新的臨時的aof檔案中寫入日誌
redis主程序接收到client新的寫操作之後,在記憶體中寫入日誌,同時新的日誌也繼續寫入舊的aof檔案
子程序寫完新的日誌檔案之後,redis主程序將記憶體中的新日誌再次追加到新的aof檔案中
用新的日誌檔案替換掉舊的日誌檔案
用redis-check-aof --fix
命令來修復破損的aof檔案
如果rdb在執行snapshotting操作,那麼redis不會執行aof rewrite;如果redis在執行aof rewrite,那麼就不會執行rdb snapshotting
如果rdb在執行snapshotting,此時使用者執行bgrewriteaof
命令,那麼等rdb快照生成之後,才會去執行aof rewrite
同時有rdb snapshot檔案和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檔案進行同步,同步操作由乙個執行緒專...