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選項設置多個保存條件,但只要其中任意一個條件被滿足,服務器就會執行BGSAVE命令
例如:
save 900 1
save 300 10
save 60 10000
那么只要滿足以下三個條件中的任意一個,BGSAVE命令就會被執行
服務器在900秒之內,對數據庫進行了至少1次修改
服務器在300秒之內,對數據庫進行了至少10次修改
服務器在60秒之內,對數據庫進行了至少10000次修改
AOF
AOF持久化是通過保存Redis服務器所執行的寫命令來記錄數據庫狀態的
AOF文件刷新的方式,有三種
(1)appendfsync always - 每提交一個修改命令都調用fsync刷新到AOF文件,非常非常慢,但也非常安全
(2)appendfsync everysec - 每秒鍾都調用fsync刷新到AOF文件,很快,但可能會丟失一秒以內的數據
(3)appendfsync no - 依靠OS進行刷新,redis不主動刷新AOF,這樣最快,但安全性就差
默認並推薦每秒刷新,這樣在速度和安全上都做到了兼顧
數據恢復
RDB方式
RDB文件的載入工作是在服務器啟動時自動執行的,沒有專門用於載入RDB文件的命令,只要Redis服務器在啟動時檢測到RDB文件存在,它就會自動載入RDB文件,服務器在載入RDB文件期間,會一直處於阻塞狀態,直到載入工作完成為止
AOF方式
服務器在啟動時,通過載入和執行AOF文件中保存的命令來還原服務器關閉之前的數據庫狀態,具體過程:
(1)載入AOF文件
(2)創建模擬客戶端
(3)從AOF文件中讀取一條命令
(4)使用模擬客戶端執行命令
(5)循環讀取並執行命令,直到全部完成
如果同時啟用了RDB和AOF方式,AOF優先,啟動時只加載AOF文件恢復數據
