Redis系列(4)_持久化方式-RDB


一、概念
在指定的時間間隔內將內存中的數據集快照寫入磁盤(滿足指定時間間隔和操作次數兩個條件), 也就是行話講的Snapshot快照,它恢復時是將快照文件直接讀到內存里

二、配置文件(redis.conf)
################################ SNAPSHOTTING  ################################
1、自動備份規則(滿足這三種條件其中之一則生成rdb文件) 
1
2
3
save 900 1              每隔900秒有1次增刪改則生成rdb文件

  save 300 10             每隔300秒有10次增刪改則生成rdb文件

  save 60 10000           每隔60秒有10000次增刪改則生成rdb文件

2、stop-writes-on-bgsave-error yes    (后台存儲存儲發生錯誤時禁止寫入,默認為yes)

3、rdbcompression yes   (啟動rdb文件壓縮,耗費CPU資源,默認為yes

4、rdbchecksum yes        (對rdb數據進行校驗,耗費CPU資源,默認為yes)

5、dbfilename dump.rdb   (rdb文件名稱)

6、dir ./                               (rdb文件前綴目錄,這里是相對目錄,和redis.conf是同一個目錄)


三、備份過程

  1. Redis會單獨創建(fork)一個子進程來進行持久化,會先將數據寫入到一個臨時文件中,待持久化過程都結束了,再用這個臨時文件替換上次持久化好的文件。
  2. 整個過程中,主進程是不進行任何IO操作的,這就確保了極高的性能如果需要進行大規模數據的恢復,且對於數據恢復的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺點是最后一次持久化后的數據可能丟失。
  3. fork的作用是復制一個與當前進程一樣的進程。新進程的所有數據(變量、環境變量、程序計數器等)數值都和原進程一致,但是是一個全新的進程,並作為原進程的子進程

四、備份操作
1、手動備份
Save:save時只管保存,其它不管,全部阻塞
BGSAVE:Redis會在后台異步進行快照操作, 快照同時還可以響應客戶端請求。可以通過lastsave 命令獲取最后一次成功執行快照的時間
flushall命令,也會產生dump.rdb文件,但里面是空的,無意義
shutdown:執行shutdown也會產生dum.rdb文件

2、自動備份
根據redis.conf配置中save設置的規則自動備份

3、手動停止備份
動態所有停止RDB保存規則的方法:redis-cli config set save ""

執行shutdown、flushdb、flushall、符合redis.conf的備份規則都會生成或更新dump.rdb,注意最后更新時間
 
五、恢復操作
  1. 將備份文件 (dump.rdb) 移動到 redis 安裝目錄並啟動服務即可
  2. 重新啟動redis后會從指定目錄+文件恢復數據

六、優缺點

優點

  1. 適合大規模的數據恢復
  2. 全量備份、恢復,只備份最后一次.rdb文件
缺點
  1. 在一定間隔時間做一次備份,所以如果redis意外down掉的話,就會丟失最后一次快照后的所有修改
  2. fork的時候,內存中的數據被克隆了一份,大致2倍的膨脹性需要考慮





免責聲明!

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



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