Redis持久化機制和恢復機制


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文件恢復數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM