Redis是內存數據庫,它將自己的數據庫狀態存儲在內存裏面,所以要提供RDB持久化功能來避免數據以爲丟失。
10.1 RDB文件的創建與載入
有兩個Redis命令可以用於生成RDB文件,一個是SAVE
另外一個是BGSAVE
,Save會阻塞進程,bgssave不會。
10.1.1 SAVE命令執行時的服務器狀態
只有在服務器執行完SAVE命令、重新開始接受命令請求之後,客戶端發送的命令愛會被處理。
10.1.2 BGSAVE命令執行時的服務器狀態
子進程來進行持久化,與許多命令不兼容。
10.1.3 RDB文件載入時的服務器狀態
載入RDB時會一直阻塞狀態。
10.2 自動間隔性保存
10.2.1 設置保存條件
save 900 1
save 300 10
save 60 100000
10.2.2 diryty計數器和lastsave屬性
dirty計數器記錄了距離上一次成功執行save命令或者bgsave命令之後,服務器對數據庫狀態進行了多少次修改(寫入、刪除、更新等操作)。
lastSave屬性是一個unix時間戳記錄上次成功執行RDB持久化的時間。
10.2.3 檢查保存條件是否滿足
10.3 RBD文件結構
常量用大寫、變量和數據用小寫。
10.3.1 databases部分
一個RDB文件的databases部分可以保存任意多個非空數據庫。
10.3.2 key_value_pairs部分
10.3.3 value編碼
RDB文件中的每個value部分都保存了一個值對象。
1、字符串對象 2、列表對象
3、集合對象
4、哈希對象
10.4 分析RDB文件
10.4.1 不包含任何鍵值對的rdb文件
10.4.2 包含字符串鍵的RDB文件
10.4.3 包含過期時間的字符串鍵的RDB文件
…各種二進制分析
10.5 重點回顧
- RDB文件用於保存和還原Redis服務器的所有數據庫中的所有鍵值對數據
- save命令阻塞操作保存
- bgsave用紫禁城執行保存操作
- rdb是一個經過壓縮的二進制文件,由多個部分組成
- 不同類型的鍵值對,rdb文件使用不同的方式保存他們。