1. 程式人生 > 實用技巧 >AOF日誌和RDB快照

AOF日誌和RDB快照

1.AOF日誌

1.1 寫後日志

AOF日誌為寫後日志,Redis先執行命令,把資料寫入記憶體,然後才記錄日誌。如下圖所示:
Redis AOF操作過程

1.2 AOF日誌記錄的內容

AOF日誌裡記錄的是Redis收到的每一條命令,這些命令以文字形式儲存。以記錄"set testkey testvalue"命令為例,看AOF日誌的內容。其中,"*3"表示當前命令有三個部分,每個部分都是由"$+數字"開頭,後面緊跟著具體的命令、鍵或者值。“數字”表示這部分中的命令、鍵或者值一共有多少位元組。例如,"$3 set"表示這部分有3位元組,也就是"set"命令。

在這裡插入圖片描述

1.3 為啥採用寫後日志

優點:為了避免額外的檢查開銷,Redis在向AOF裡面記錄日誌的時候,並不會先對這些語法進行檢查。如果先記日誌再執行命令,日誌中就可能記錄了錯誤的命令,Redis在使用日誌恢復資料時,就可能出錯。所以Redis就採用寫後日志這種方式,讓系統先執行命令,只有命令才能執行成功,才會被記錄到日誌中。否則,系統會直接向客戶端報錯。寫後日志能避免記錄錯誤命令的情況。
寫後日志還有一個好處:在命令執行後才開始記錄,不會阻塞當前的寫操作。
缺點
1.執行完一個命令,還沒來得及記日誌就宕機了,那麼這個命令和相應的資料就有丟失的風險。如果此時Redis是用作快取,還可以從後端資料庫重新讀入資料進行恢復,但是,如果Redis用作資料庫,此時命令沒有記錄到日誌中,就無法用日誌進行恢復了。

2.雖然避免了當前命令的阻塞,但可能會給下一個操作帶來阻塞風險,