Redis - RDB持久化與AOF持久化

RDB持久化與AOF持久化可以同時存在,但重啓時,AOF文件會被優先用於恢復數據。

RDB持久化

RDB文件是壓縮過的二進制文件,用於保存和還原Redis服務器所有數據庫中的所有鍵值對數據。

SAVE命令由服務器進程直接執行,是阻塞的命令;BGSAVE由子進程(注意不是子線程)執行保存,不會阻塞服務器。

服務器狀態中會保存所有save選項設置的保存條件,當任意一個保存條件被滿足時,BGSAVE會被自動執行。

不同類型的鍵值對在RDB文件中以不同的形式保存。

AOF持久化

AOF文件保存所有修改過數據庫的寫命令記錄數據庫狀態,所有命令都以Redis命令請求協議的格式保存。

爲了避免頻繁IO,命令請求會先保存在AOF緩衝區裏,之後再定期寫入AOF文件。

由於AOF文件的模式,隨時間增加,AOF文件體積會逐漸增大,因此Redis提供了AOF重寫功能,實際上來說,該功能是通過讀取數據庫中的鍵值對反向獲得命令實現,其體積更小,狀態一致。

後臺重寫AOF文件過程:

在AOF文件重寫時,服務器會維護一個AOF重寫緩衝區,在子進程創建新的AOF文件期間,記錄服務器執行的所有寫命令,當子進程完成AOF文件的生成後,將重寫緩衝區內的所有內容追加到新的AOF文件末尾,此時服務器進程是阻塞的,不會產生新內容,待完成後,將新的AOF文件替換舊的文件,完成重寫操作。

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