AOF持久化意思是以獨立日誌的方式記錄每次寫入命令,並在Redis重啟時在重新執行AOF檔案中的命令以達到恢復資料的目的,AOF的主要作用是解決資料持久化的實時性。
Redis 是記憶體資料庫,將資料保存在記憶體中,讀寫效率比傳統的將資料保存在磁碟上的資料庫要快很多。但是一旦進程退出,Redis 的資料就會遺失。
為了解決這個問題,Redis 提供了 RDB 和 AOF 兩種持久化方案,將記憶體中的資料保存到磁碟中,避免資料遺失。 RDB的介紹在這篇文章中《Redis RDB 持久化詳解》,今天我們來看看 AOF 相關的原理。
AOF( append only file )持久化以獨立日誌的方式記錄每次寫入命令,並在 Redis 重啟時在重新執行 AOF 檔案中的命令以達到恢復資料的目的。 AOF 的主要作用是解決資料持久化的即時性。
RDB 和AOF
antirez 在《Redis 持久化解密》一文中講述了RDB 和AOF 各自的優缺點:
#RDB 是一個緊湊壓縮的二進位文件,代表Redis 在某個時間點上的資料備份。非常適合備份,全量複製等場景。例如每6小時執行 bgsave 備份,並把 RDB 檔案拷貝到遠端機器或檔案系統中,用於災難復原。
Redis 載入RDB 復原資料遠快於AOF 的方式
RDB 方式資料沒辦法做到即時持久化,而AOF 方式可以做到。
AOF持久化的步驟?
1、命令追加步驟
首先伺服器將對資料庫的寫入操作命令放入AOF緩衝區中,並透過週期函數來檢查是否需要將緩衝區內的內容寫入AOF檔案中(一般有三種策略:always,everysecond,no)。這三種策略是在安全性與效率之間的平衡。
2、資料還原
透過建立一個不帶網路連線的偽客戶端,並依序執行AOF中的指令,從而實現資料的還原。
3、AOF重寫
因為AOF是記錄寫入操作命令,會導致檔案的冗餘,只要透過對資料庫目前狀態的重新讀出,從而可以實現AOF的精簡。
具體流程如下:
先建立一個子程序(為什麼不用執行緒呢?因為執行緒會造成鎖,導致效率低下。而且用子程序不會阻塞父行程)
然後父行程建立一個AOF重寫緩衝區,用於記錄在AOF重寫期間執行的寫入指令。
一個寫入指令會同時傳送給AOF緩衝區和AOF重寫緩衝區。
接著等到重寫完成,子行程向父行程發送訊號,父行程會將AOF重寫緩衝區的內容追加的新的AOF檔中,並原子化的取代原先的AOF檔。
推薦教學: 《Redis教學》
以上是AOF持久化是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!