RDB
RDB啟動方式
第一種
誰,什麼時間,幹什麼事情
命令執行
- 誰:redis操作者(使用者)
- 什麼時間:即時(隨時進行)
- 幹什麼事情:儲存資料
- 命令
save
- 作用
手動執行一次儲存操作
RDB啟動方式 —— save指令相關配置
redis配置檔案引數
- dbfilename dump.rdb
說明:設定本地資料庫檔名,預設值為dump.rdb
經驗:通常設定為dump-埠號.rdb - dir
說明:設定儲存.rdb
經驗:通常設定成儲存空間較大的目錄中,目錄名稱data - rdbcompression yes
說明:設定儲存至本地資料庫時是否壓縮資料,預設為yes,採用LZF壓縮
經驗:通常預設為開啟專題,如果設定為no,可以節省CPU執行時間,但會使儲存的檔案變大(巨大) - rdbchecksum yes
說明:設定是否進行RDB檔案格式校驗,該校驗過程在寫檔案和讀檔案過程均進行
經驗:通常預設為開啟狀態,如果設定為no,可以節約讀寫性過程約10%時間消耗,但是存在一定的資料損壞的風險
RDB啟動方式 —— save指令工作原理
注意:save指令的執行會阻塞當前Redis伺服器,直到當前RDB過程完成為止,有可能會造成長時間阻塞,線上環境不建議使用。
第二種
資料量過大,單執行緒執行方式造成效率過低如何處理
後臺執行
- 誰:redis操作者(使用者)發起指令;redis伺服器控制指令執行
- 什麼時間:即時(發起);合理的時間(執行)
- 幹什麼事情:儲存資料
- 命令
bgsave
- 作用
手動啟動後臺儲存操作,但不是立即執行
RDB啟動方式 —— bgsave指令工作原理
注意:bgsave命令時針對save阻塞問題做的最佳化。Redis內部所有涉及到RDB操作都採用bgsave的方式,save命令可以放棄使用。
RDB啟動方式 —— bgsave指令相關配置
- dbfilename dump.rdb
- dir
- rdbcompression yes
- rdbchecksum yes
- stop-writes-on-bgsave-error yes
說明:後臺儲存過程中如果出現錯誤現象,是否停止儲存操作
經驗:通常預設開啟狀態
自動執行
反覆執行儲存指令,忘記了怎麼辦?不知道資料產生了多少變化,何時儲存?
自動執行
- 誰:redis伺服器發起指令(基於條件)
- 什麼時間:滿足條件
- 幹什麼事情:儲存資料
配置
- save second changes
作用
滿足限定時間範圍內key的變化達到指定數量即進行持久化引數
second:監控時間範圍
changes:監控key的變化量位置
在conf檔案中進行配置範例
save 900 1
save 300 10
save 60 10000
RDB啟動方式 —— save配置 原理
注意:
save配置要根據實際業務情況進行設定,頻度過高或過低都會出現效能問題,結果可能是災難性的
save配置中對於second與changes設定通常具有互補對應關係,儘量不要設定成包含關係
save配置啟動後執行的是bgsave操作
RDB三種啟動方式對比
方式 | save指令 | bgsave指令 | save配置 |
---|---|---|---|
讀寫 | 同步 | 非同步 | 非同步 |
阻塞客戶端指令 | 是 | 否 | 否 |
額外記憶體消耗 | 否 | 是 | 是 |
啟動新的程式 | 否 | 是 | 是 |
RDB特殊啟動形式
- 全量複製
在主從複製中詳細講解 - 伺服器執行過程中重啟
debug reload
- 關閉伺服器時指定儲存資料
shutdown save
RDB優點
- RDB 是一個勁湊壓縮的二進位制檔案,儲存效率較高
- RDB內部儲存的是redis在某個時間點的資料快照,非常適合於資料備份,全量複製等場景
- RDB恢復資料的速度要比AOF快很多
- 應用:伺服器中每X小時執行basave備份,並將RDB檔案複製到遠端機器中,用於災難恢復
RDB缺點
- RDB方式無論是執行指令還是利用配置,無法做到實時持久化,具有較大的可能性丟失資料
- bgsave指令每次執行要執行fork操作建立子程式,要犧牲掉一些效能
- Redis的眾多版本中未進行RDB檔案格式的版本統一,有可能出現各版本服務之間資料格式無法相容現象
- 儲存資料量較大,效率較低(基於快照思想,每次讀寫都是全部資料,當資料量巨大時,效率非常低)
- 大資料量下的IO效能較低
本作品採用《CC 協議》,轉載必須註明作者和本文連結