其實redis oaf機制包括了兩件事,rewrite和aof。rewrite類似於普通資料庫管理系統日誌恢復點,當aof檔案隨著寫命令的執行膨脹時,當檔案大小觸碰到臨界時,rewrite會被執行。
rewrite會像replication一樣,fork出乙個子程序,建立乙個臨時檔案,遍歷資料庫,將每個key、value對輸出到臨時檔案。輸出格式就是redis的命令,但是為了減小檔案大小,會將多個key、value對集合起來用一條命令表達。在rewrite期間的寫操作會儲存在記憶體的rewrite buffer中,rewrite成功後這些操作也會複製到臨時檔案中,在最後臨時檔案會代替aof檔案。
以上在aof開啟的情況下,如果aof是關閉的,那麼rewrite操作可以通過bgrewriteaof命令來進行。
redis server啟動,如果aof機制開啟那麼初始化aof狀態,並且如果存在aof檔案,讀取aof檔案。
隨著redis不斷接受命令,每個寫命令都被新增到aof檔案,aof檔案膨脹到需要rewrite時又或者接收到客戶端的bgrewriteaof命令。
fork出乙個子程序進行rewrite,而父程序繼續接受命令,現在的寫操作命令都會被額外新增到乙個aof_rewrite_buf_blocks緩衝中。
當子程序rewrite結束後,父程序收到子程序退出訊號,把aof_rewrite_buf_blocks的緩衝新增到rewrite後的檔案中,然後切換aof的檔案fd。rewrite任務完成,繼續第二個步驟。
redis持久化RDB與AOF
redis是一種記憶體型資料庫,一旦伺服器程序退出,資料庫的資料就會丟失,為了解決這個問題,redis提供了兩種持久化的方案,將記憶體中的資料儲存到磁碟中,避免資料的丟失。redis提供了rdb持久化的功能,這個功能可以將redis在記憶體中的的狀態儲存到硬碟中,它可以手動執行。也可以再redis....
《Redis設計與實現》 AOF持久化
redis aof 持久化是通過儲存redis伺服器所執行的寫命令來記錄資料庫狀態的。aof持久化 當aof持久化功能處於開啟狀態時,伺服器在執行完乙個寫命令後,會以協議格式將被執行的寫命令追加到伺服器狀態的 aof buf快取區的末尾。檔案的寫入和同步 為了提高檔案的寫入效率,在現代作業系統中,當...
《Redis設計與實現》 AOF持久化
redis aof 持久化是通過儲存redis伺服器所執行的寫命令來記錄資料庫狀態的。aof持久化 當aof持久化功能處於開啟狀態時,伺服器在執行完乙個寫命令後,會以協議格式將被執行的寫命令追加到伺服器狀態的 aof buf快取區的末尾。檔案的寫入和同步 為了提高檔案的寫入效率,在現代作業系統中,當...