redis 持久化的兩種方式和恢複
來源:互聯網
上載者:User
一、Redis持久化的方式有兩種:
1.RDB:對記憶體中資料庫狀態進行快照
2.AOF:把每條寫命令都寫入檔案,類似於mysql的binlog日誌
RDB方式:將Redis在記憶體中的資料庫狀態儲存到磁碟裡面,RDB檔案是一個經過
壓縮的二進位檔案,通過該檔案可以還原產生RDB檔案的資料狀態。
RDB的產生方式:
1.指向命令手動產生
有兩個Redis命令可以產生RDB檔案,一個是SAVE,另一個是BGSAVE,SAVE
命令會阻塞Redis伺服器處理序,知道RDB檔案建立完畢為止,在伺服器阻塞期間,服
務器不能處理任何的進程,BGSAVE會派出一個子進程,然後由子進程負責建立RDB
檔案,伺服器處理序(父進程)繼續處理命令請求,建立RDB檔案結束之前,用戶端
發送的 BGSAVE 和 SAVE 命令會被伺服器拒絕
2.通過配置自動產生
可以設定伺服器配置的save選項,讓伺服器每隔一段時間自動執行一次BGSAVE命令,可以通過save選項設定多個儲存條件,但只要其中任意一個條件被滿足就會執行BGSAGE命令
列如:
save 900 1
save 300 10
save 60 10000
那麼只要滿足以下三個條件中的其中一個,BGSAVE命令就會被執行
伺服器在 900 秒之內,對資料庫進行了 1 次修改
伺服器在 300 秒之內,對資料庫進行了 10 次修改
伺服器在 900 秒之內,對資料庫進行了 10000 次修改
AOF方式:是通過儲存Redis伺服器所執行的寫命令來記錄資料庫狀態的AOF檔案重新整理方式,有三種:
1.appendfsync always --每提交一個修改命令都調用fsync到AOF檔案,非常慢,但是很安全;
2.appendfsync everysec--每秒都調用fsyns重新整理到AOF檔案,很快但可能丟失一秒內的資料;
3.appendfsync no--依靠OS進行重新整理,redis不主動重新整理AOF,這樣最快但是安全性差;
預設並且推薦每秒重新整理,這樣在速度和安全上都做到了兼顧
二、資料恢複
1.ROB方式
ROB檔案的載入工作是在伺服器啟動時自動執行的,沒有專門用於載入ROB檔案命令,只要Redis伺服器再啟動時檢測到ROB檔案存在,它就會自動載入ROB的檔案,在伺服器載入的期間,會一直處於阻塞狀態,知道載入工作完成為止
2.AOF方式
伺服器在啟動時,通過載入和執行AOF檔案中儲存的命令來還原伺服器關閉之前的資料,具體庫狀態過程:
載入AOF檔案
建立類比用戶端
從AOF檔案中讀取一條命令
使用類比用戶端執行命令
迴圈讀取並執行命令,知道全部完成
如果同時啟動了AOF和ROB方式,AOF優先,啟動時只載入AOF檔案恢複數時之家在