引言: Redis是基於記憶體的資料庫,同時也提供了若干持久化的方案,允許使用者把記憶體中的資料,寫入本地檔案系統,以備下次重啟或者當機之後繼續使用。本文將描述如何基於Redis來設定AOF功能
什麼是Redis的AOF?
AOF是AppendOnly File的縮寫,是Redis系統提供了一種記錄Redis操作的持久化方案,在AOF產生的檔案中,將忠實記錄發生在Redis的操作,從而達到在Redis伺服器重啟或者當機之後,繼續恢複之前資料狀態的機制。
以下我們來簡要看看如何在Redis中使用AOF,並驗證整個過程:
A. Redis中主要的AOF設定
appendonly yes ---- 開啟aof設定,同時將快照功能置於低優先順序的位置
appendfsync no
當設定appendfsync為no的時候,Redis不會主動調用fsync去將AOF日誌內容同步到磁碟,所以這一切就完全依賴於作業系統的調試了。對大多數Linux作業系統,是每30秒進行一次fsync,將緩衝區中的資料寫到磁碟上。
appendfsync everysec
當設定appendfsync為everysec的時候,Redis會預設每隔一秒進行一次fsync調用,將緩衝區中的資料寫到磁碟。但是當這一次的fsync調用時間長度超過1秒時。Redis會採取延遲fsync的策略,再等一秒鐘。也就是在兩秒後再進行fsync,這一次的fsync就不管會執行多 長時間都會進行。這時候由於在fsync時檔案描述符會被阻塞,所以當前的寫操作就會阻塞。
結論就是,在絕大多數情況下,Redis會每隔一秒進行一 次fsync。在最壞的情況下,兩秒鐘會進行一次fsync操作。這一操作在大多數資料庫系統中被稱為group commit,就是組合多次寫操作的資料,一次性將日誌寫到磁碟。
appendfsync always
置appendfsync為always時,每一次寫操作都會調用一次fsync,這時資料是最安全的,當然,由於每次都會執行fsync,
所以其效能也會受到影響。
B. 啟動redis-server
C. 開啟redis-cli,操作資料
D. 查看aof檔案
從上面的圖示中,可以發現,在AOF的檔案中,它忠實記錄了發生在Redis上的操作,從而達到了還原資料的目的。當然,這個方式並不是一種效率很高的方式。主要的問題在於,有可能對於部分資料,進行了大量的操作。在這種情況下就必須產生大量的冗餘操作記錄。針對這個問題的解決辦法,我將在後續的blog中涉及到。