RDB+AOF兩種模式整合在一起,可以在特定的時間產生快照資料,也保存了所有Redis Server收到的所有操作成功的日誌,這樣在Redis Server啟動時可以先載入RDB的快照內容後,再載入AOF的日誌資料,即可讓資料遺失的可能降到最低.
# 需要先打開才會套用此模式
# 先載入rdb再載入aof
aof-use-rdb-preamble yes
# 模擬rdb save後再異動操作
127.0.0.1:6379> save
OK
# 執行多次操作寫入aof日誌檔
127.0.0.1:6379> set book 111
OK
127.0.0.1:6379> set book 222
OK
127.0.0.1:6379> set book 333
OK
127.0.0.1:6379> set book 444
OK
127.0.0.1:6379> set bool 555
OK
# 關閉Redis Server 不存rdb檔
127.0.0.1:6379> shutdown nosave
# 再次啟動Redis Server使用自己設定好的config
./redis-server /home/redis/config/redis.conf
# 結果如下
# Loading RDB prodyced by version 6.2.5
# RDB age 2 seconds
# RDB has an AOF tail
# Reading the remaining AOF tail...
# DB loaded from append only file: 0.001 seconds
AOF是記錄了Redis Server所有操作成功的日誌,當操作的越多檔案越大,相對的啟動Redis Server時所需要花費的時間就會越長,在日誌內容中我們只需要關注的是Key的最後結果,所以可以透過BGREWRITEAOF將檔案相同的key操作匯總成最後一個.
(此時當用戶端繼續操作時,Redis Server除了寫入aof_buf以外,也會寫入rewrite buffer,並透過Redis的父Process會fork一個子Process獨立進行同步)
# 異動book的value多次
127.0.0.1:6379> set book abc
OK
127.0.0.1:6379> set book def
OK
127.0.0.1:6379> set book ghi
OK
# aof日誌檔內容實際記錄
vi appendonly.aof
# 將日誌檔匯總
127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started
確認AOF日誌檔案是否已經匯總