第五章:Redis持久化-RDB持久化

Redis持久哈分爲RDB和AOF兩種方式,持久化功能能有效避免因進程退出形成的數據丟失問題。下次重啓時能夠利用以前持久化的文件便可實現數據恢復;
 
RDB持久化
把當前進程數據生成快照保存到硬盤的過程,觸發RDB持久化分爲手動和自動觸發;
觸發機制
  • 手動觸發分別對應save和bgsave命令:
  1. save命令:阻塞當前Redis服務器,直到RDB過程完成爲止,對於內存較大的實例會形成長時間的阻塞,線上不建議使用,save命令對應的日誌是:DB saved on disk.
  2. bgsave命令:Redis進程執行fork操做建立子進程,RDB持久化過程由子進程負責,完成後自動結束。阻塞只發生在fork階段,通常時間很短。
  • 自動觸發
  1. 在redis.conf配置文件中使用save相關配置,例如save m n,表示m秒內數據集存在n次修改時,自動觸發bgsave;
  2. 若是從節點執行全量複製操做,主節點自動執行bgsave生成RDB文件併發送給從節點;
  3. 執行debug reload命令從新加載redsi時,也會自動觸發save操做;
  4. 默認狀況下執行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。
相關文章
相關標籤/搜索