redis(6)——AOF持久化

        與RDB持久化通過保存數據庫中的鍵值對來記錄數據庫狀態不同,AOF持久化是通過保存Redis服務器所執行的寫命令來記錄數據庫狀態的。

一、AOF持久化的實現

        AOF持久化功能的實現可以分爲命令追加(append)、文件寫入、文件同步(sync)三個步驟。

1、命令追加   

        當AOF持久化功能處於打開狀態時,服務器在執行完一個寫命令之後,會以協議格式將被執行的寫命令追加到服務器狀態的aof_buf緩衝區的末尾:

2、AOF文件的寫入與同步

        因爲服務器在處理文件事件時可能會執行寫命令,使得一些內容被追加到aof_buf緩衝區裏面,所以在服務器每次結束一個事件循環之前,它都會調用flushAppendOnlyFile函數,考慮是否需要將aof_buf緩衝區中的內容寫人和保存到AOF文件裏面。

        flushAppendOnlyFile函數的行爲由服務器配置的appendfsync選項的值來決定。

3、AOF文件的載入與數據還原

載入過程


        服務器讀人AOF文件,並根據文件內容來還原數據庫狀態

二、AOF重寫

1、AOF文件重寫的實現

        首先從數據庫中讀取鍵現在的值,然後用一條命令去記錄鍵值對,代替之前記錄這個鍵值對的多條命令,這就是AOF重寫功能的實現原理。

2、AOF後臺重寫

        爲了解決這種數據不一致問題,Redis服務器設置了一個AOF重寫緩衝區,這個緩衝區在服務器創建子進程之後開始使用,當Redis服務器執行完一個寫命令之後,它會同時將這個寫命令發送給AOF緩衝區和AOF重寫緩衝區。


        當子進程完成AOF重寫工作之後,它會向父進程發送一個信號,父進程在接到該信號之後,會調用一個信號處理函數,並執行以下工作:

        1)將AOF重寫緩衝區中的所有內容寫人到新AOF文件中,這時新AOF文件所保存的數據庫狀態將和服務器當前的數據庫狀態一致。

        2)對新的AOF文件進行改名,原子地(atomic )覆蓋現有的AOF文件,完成新舊兩個AOF文件的替換。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章