1. 程式人生 > >《Redis設計與實現》讀書筆記

《Redis設計與實現》讀書筆記

技術 pen image 選項 讀書 實現 服務器 bubuko ever

第11章:AOF持久化

AOF(Append Of File)持久化:通過保存Redis服務器所執行的寫命令來記錄數據庫狀態。
技術分享圖片

AOF持久化功能的實現分為:命令追加(append)、文件寫入、文件同步(sync)三步。
命令追加:寫命令會被追加到aof_buf緩沖區的末尾。
AOF文件的寫入與同步:
appendfsync選項的設置對安全性和性能有很大影響非常重要。
技術分享圖片
appendfsync的值為always時,寫入並同步,效率最慢,最安全。
appendfsync設置為everysec時,寫入並同步,效率夠快,就算故障停機,也只丟失一秒的命令數據。
appendfsync為no時,只將aof_buf緩沖區內容寫入到AOF文件,不執行同步。

AOF文件的載入與數據還原
Redis服務器只要讀入並重新執行一遍AOF文件保存的寫命令,就可以還原關閉之前的數據庫狀態。
AOF重寫(rewrite)
AOF文件的內容越來越多,文件體積越來越大,Redis提供AOF文件重寫功能。
AOF重寫的原理:首先從數據庫中讀取鍵現在的值,然後用一條命令去記錄鍵值對,代替之前記錄這個鍵值對的多條命令。
AOF後臺重寫(BGREWRITEAOF命令)
為了避免線程長時間阻塞,Redis將AOF重寫放到子進程裏執行。
為了使得服務器當前數據庫狀態和重寫後的AOF文件所保存的數據庫狀態一致,會在AOF重寫期間,將寫命令追加到AOF緩沖區和AOF重寫緩沖區。
技術分享圖片

《Redis設計與實現》讀書筆記