Redis持久哈分爲RDB和AOF兩種方式,持久化功能能有效避免因進程退出形成的數據丟失問題。下次重啓時能夠利用以前持久化的文件便可實現數據恢復;
RDB持久化
把當前進程數據生成快照保存到硬盤的過程,觸發RDB持久化分爲手動和自動觸發;
觸發機制
- save命令:阻塞當前Redis服務器,直到RDB過程完成爲止,對於內存較大的實例會形成長時間的阻塞,線上不建議使用,save命令對應的日誌是:DB saved on disk.
- bgsave命令:Redis進程執行fork操做建立子進程,RDB持久化過程由子進程負責,完成後自動結束。阻塞只發生在fork階段,通常時間很短。
- 在redis.conf配置文件中使用save相關配置,例如save m n,表示m秒內數據集存在n次修改時,自動觸發bgsave;
- 若是從節點執行全量複製操做,主節點自動執行bgsave生成RDB文件併發送給從節點;
- 執行debug reload命令從新加載redsi時,也會自動觸發save操做;
- 默認狀況下執行shutdown命令,若是沒有開啓AOF持久化功能則自動執行bgsave;
RDB文件的處理
- 保存:RDB文件默認保存在dir配置指定的目錄下,經過dbfilename配置執定;
- 壓縮:Redis默認採用LZF算法對生成的RDB文件進行壓縮處理,默認開啓,能夠經過參數config set rdbcompression {yes|no}動態設置;注意:壓縮會消耗CPU、但能夠大幅下降文件的體積,方便保存,所以建議線上開啓;
- 校驗:若是Redis加載損壞的RDB文件時拒絕啓動,並打印日誌:short read or oom loading DB. unrecoverable error,aborting now;
RDB的優缺點
優勢
- RDB時一個緊湊的二進制文件,適合備份和全量複製等場景。
- Redis加載RDB恢復數據速度遠遠快於AOF方式
缺點
- RDB方式數據沒辦法作大實時持久化/秒級持久化,由於bgsave要fork進程,執行成本高
- RDB文件使用特定二進制格式保存,沒法兼容不一樣版本的Redis。