Redis持久化之RDB
RDB (快照)持久化:保存某個時間點的全量數據快照。
在配置文件中進行配置
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes # 當備份進程出錯的時候就停止主進程寫入數據
rdbcompression yes # RDB備份文件是否開啟壓縮,建議為no,redis本身就是CPU密集型進程
以save 900 1為例,意思是在900s內,出現1一條數據變動就進行一次RDB備份。
Redis的持久化方式
? SAVE :阻塞Redis的服務器進程,直到RDB文件被創建完畢
? BGSAVE : Fork出一-個子進程來創建RDB文件,不阻塞服務器進程
自動化觸發RDB持久化的方式
- 根據redis.conf配置里的SAVE m n定時觸發(用的是BGSAVE )
- 主從復制時BGSAVE,主節點自動觸發
- 執行Debug Reload
- 執行SHUTDOWN的時候沒有開啟AOF持久化
BGSAVE原理
BGSAVE原理
系統調用fork() :創建進程,實現了Copy-on-Write
Copy-on-Write
如果有多個調用者同時要求相同資源(如內存或磁盤上的數據存儲),他們會共同獲取相同的指針指向相同的資源,直到某個調用者試圖修改資源的內容時,系統才會真正復制一份專用副本給該調用者,而其他調用者所見到的最初的資源仍然保持不變
使用RDB持久化的缺點
- 內存數據的全量同步, 數據量大會由于I/O而嚴重影響性能
- 可能會因為Redis掛掉而丟失從當前至最近一-次快照期間的數據