什么是持久化
利用永久性存儲介質將數據進行保存,在特定的時間將保存的數據進行恢復的工作機制稱為持久化
為什么要進行持久化
防止數據的意外丟失,確保數據安全性
持久化過程保存什么
1.將當前數據狀態進行保存,快照形式,存儲數據結果,存儲格式簡單,關注點在數據 RDB 2.將數據的操作過程進行保存,日志形式,存儲操作過程,存儲格式復雜,關注點在數據的操作過程 AOF
一、RDB啟動方式——save指令
命令執行
誰:redis操作者(用戶)
什么時間:即時(隨時進行)
干什么事:保存數據
命令
save #客戶端設置完key/value之后輸入save保存
作用
手動執行一次保存一次數據
執行持久化命令之后在日志存放地址發現dump.rab文件,執行save命令保存數據的文件,保存當前的快照信息。
二、RDB啟動方式——save指令相關配置
在配置文件中修改以下參數
三、數據恢復過程演示
就是在啟動的時候將數據加載過來的
四、RDB啟動方式——bgsave指令
Redis是單線程任務執行序列,如果執行save命令時間過長會阻塞當前Redis服務器,直到當前RDB過程完成為止,有可能會造成長時間阻塞,線上環境不建議使用。
數據量過大,單線程執行方式造成效率過低如何處理:放在后台執行
誰執行:redis操作者(用戶)發起指令;redis服務器控制指令執行
什么時間:即時(發起);合理的時間(后台執行)
干什么事情:保存數據
命令
bgsave #后台操作
作用:手動啟動后台保存操作,但不是立即執行
bgsave指令工作原理 (******)
1.客戶端發送bgsave指令到redis服務端 2.系統調用fork函數,生成子進程 3.創建rdb文件 4.完成之后會返回redis服務端消息,告訴已經保存完畢
操作流程可以在日志文件中查看到
注意:bgsave命令是針對save阻塞問題做的優化。Redis內部所有涉及到RDB操作都采用bgsave的方式,save命令可以放棄使用
使用bgsave指令相關配置 stop-write-on-bgsave-error yes 說明:后台存儲過程中如果出現錯誤現象,是否停止保存操作,通常默認為開啟狀態
五、RDB啟動方式——自動執行save配置(后台還是使用bgsave指令)
前面兩種都是手動執行,如果忘記執行命令怎么辦?不知道數據產生了多少變化,何時保存。
自動執行
誰:redis服務器發起指令(基於條件)
什么時間:滿足條件
干什么事情:保存數據
conf配置文件: save seconds changes 作用:滿足限定時間范圍內key的變化數量達到指定數量即進行持久化 參數: second:監控時間范圍(單位是s) changes:監控key的變化量 位置:在conf配置文件中進行配置 例如 save 900 1 #900秒內監測到1個key發生變化,在規定時間內只要有這些數量的key發生變化
注意:配置好后,后台還是使用的bgsave指令,除了查詢之外,增加、修改、覆蓋key值都會保存記錄
save配置原理
注意
1.save配置要根據實際業務情況進行設置,頻率過高過低都會出現性能問題,結果可能是災難性的。 2.save配置中對於second和changes設置通常具有互補對應關系,盡量不要設置成包含關系 3.save配置啟動后執行的是bgsave操作
六、RDB三種啟動方式對比
七、RDB特殊啟動形式
1.全量復制 在主從復制中詳細講解 2.服務器運行過程中重啟 debug reload 3.關閉服務器時指定保存數據 shutdown save
八、RDB優缺點