Redis的AOF持久化
特點:
- 通過儲存Redis伺服器所執行的寫指令來記錄資料庫狀态
- 與RDF的差別是RDF儲存資料庫的鍵值對
持久化實作(三個步驟)
1.追加
伺服器執行完一個指令之後會将指令寫入到緩沖區aof_buf末尾
2.檔案寫入
伺服器每執行完一個事件都會判斷是否需要将aof_buf的内容寫入儲存到AOF檔案裡
不同的appendfsync參數:
- always:每次都将aof緩沖區内容寫入到AOF檔案
- everysec:距離上次AOF寫入超過1秒就寫入到AOF中
- no:永遠不儲存
3.檔案同步
AOF檔案載入和還原
AOF重寫
通過建立一個新的AOF檔案替代現在的AOF檔案,并取代一些浪費空間的指令
實作:
- 通過讀取伺服器目前的資料庫狀态實作的
- 從資料庫中讀取鍵現在的值,并用一條指令去記錄鍵值對,替代之前的多條指令
背景重寫
因為重寫過程需要大量的寫入操作,IO操作會比較消耗時間,是以Redis建立一個子程序實作重寫
優點:
- 父程序可以繼續處理指令請求
子程序帶有伺服器的程序的副本可以避免使用鎖的情況下保證資料的安全- 性
缺點:
重寫期間的新指令寫入會導緻重寫後的資料庫狀态與AOF儲存的資料庫狀态不一緻
解決辦法
AOF重寫緩沖區:在AOF進行重寫後開始使用
- 重寫期間Redis每執行完一個寫指令會同時将寫指令發送給AOF緩沖區和AOF重寫緩沖區
- 在重寫完畢之後,子程序會發送信号給父程序
- 父程序會把重寫緩沖區的所有内容寫入到AOF檔案中并對新的AOF檔案原子地覆寫現在的AOF檔案
本章思維導圖
AOF持久化圖檔源檔案
AOF持久化Xmind源檔案