天天看點

Redis持久化之RDB的定義及執行原理1.定義2.執行流程3.觸發機制4.備份和恢複5.停止RDB的方式6.優缺點

Redis 提供了 RDB 和 AOF 兩種持久化機制,前者将目前的資料儲存到磁盤,後者則是将每次執行的寫指令儲存到磁盤(類似于 MySQL 的 Binlog)。本文将詳細介紹 RDB持久化方案,包括操作方法和持久化的實作原理

RDB持久化方案,請參考 Redis持久化之AOF

1.定義

RDB 持久化(也稱作快照持久化)是指将記憶體中的資料生成快照儲存到磁盤裡面,術語snapshot快照,儲存的檔案字尾是 .rdb。它恢複時是将.rdb檔案直接讀取到記憶體中。

2.執行流程

Redis會單獨建立(fork)一個子程序來進行持久化,會先将資料寫入到 一個臨時檔案中,待持久化過程都結束了,再用這個臨時檔案替換上次持久化好的檔案

Redis持久化之RDB的定義及執行原理1.定義2.執行流程3.觸發機制4.備份和恢複5.停止RDB的方式6.優缺點

3.觸發機制

方式一:自動觸發 : 配置檔案配置

自動觸發是由我們的配置檔案來完成的。在redis.conf配置檔案中,裡面有如下配置,我們可以去設定:

save 這裡是用來配置觸發 Redis的 RDB 持久化條件,也就是什麼時候将記憶體中的資料儲存到硬碟,

格式:“save m n”。表示m秒内資料集存在n次修改時,自動觸發bgsave。

stop-writes-on-bgsave-error RDB失敗後,Redis是否停止接收資料。預設值為yes

rdbcompression 對存儲在磁盤上的快照是否進行壓縮存儲。預設值是yes

rdbchecksum 存儲快照後是否進行資料校驗,會增加資源消耗。預設值是yes

dbfilename 設定快照檔案的名稱,預設值為dump.rdp

dir 設定快照檔案的存放路徑

方式二:手動觸發 : SAVE 和 BGSAVE

SAVE: 該指令會阻塞目前Redis伺服器,執行save指令期間,Redis不能處理其他指令,直到RDB過程完成為止。

BGSAVE: Redis程序執行fork操作建立子程序,RDB持久化過程由子程序在背景異步進行快照操作,快照同時還可以響應用戶端請求,完成後自動結束。阻塞隻發生在fork階段,一般時間很短。

方式三:FLUSHALL指令
方式四:Redis關閉的時候

4.備份和恢複

備份: 先通過config get dir 查詢rdb檔案的目錄 ,将*.rdb的檔案拷貝到别的地方即可

恢複: 先關閉Redis,将備份檔案拷貝到快照檔案目錄下,啟動redi後,就會自動加載檔案資料至記憶體了。Redis 伺服器在載入 RDB 檔案期間,會一直處于阻塞狀态,直到載入工作完成為止。

5.停止RDB的方式

  • 注釋掉所有的 save 行來停用儲存功能或者直接一個空字元串來實作停用:save ""
  • 也可以通過指令:redis-cli config set save " "

6.優缺點

優點

RDB是一個非常緊湊(compact)的檔案,全量備份,它儲存了redis 在某個時間點上的資料集。這種檔案非常适合用于進行備份和災難恢複。

生成RDB檔案的時候,redis主程序會fork()一個子程序來處理所有儲存工作,主程序不需要進行任何磁盤IO操作。

RDB 在恢複大資料集時的速度比 AOF 的恢複速度要快。

缺點

在一定間隔時間做一次備份,是以如果redis意外down掉的話,就會丢失最後一次快照後的所有修改(資料有丢失)

RDB方式資料沒辦法做到實時持久化

fork程序的時候,會占用一定的記憶體空間

文章多以個人學習及了解為基礎略作整理,如有錯誤,請聯系我,我會及時修改.
推薦閱讀: