Redis 設計與實現 (三)
阿新 • • 發佈:2018-01-27
check 就會 鍵值 鍵值對 是否 second 變化 write 次數
RDB 持久化
一、生成RDB
cmd:SAVE --阻塞進程,執行完,才能有效接收客戶端命令。
cmd: BGSAVE --非阻塞,開啟子進程保存。
客戶端如果發送SAVE和BGSAVE命令直接拒絕。
BGWRITEAOF命令再BGSAVE執行完才能執行。
二、載入RDB
服務器啟動時自動執行,檢測到RDB文件就會自動加載。
如果開啟AOF,優先使用執行AOF。
AOF關閉的情況下,才會執行RDB。
三、自動間隔性保存
save設置:一定條件後執行BGSAVE命令進行保存
默認設置:
save 900 1 //900秒內,進行一次修改,觸發保存BGSAVE
save 300 1 //300秒內,10次修改,觸發保存BGSAVE
save 60 10000 //60秒內,1w次修改,觸發保存BGSAVE
struct saveparam { time_t seconds; //秒數 int changes;//變化次數 };
還有兩個參數:
dirty --上次數據庫觸發保存命令修改數
lastsave -- 最後一次執行save時間
PORT_LONGLONG dirty; /* Changes to DB from the last save*/
time_t lastsave; /* Unix time of last successful save */
還有一個定時器默認100毫秒來檢測是否滿足save條件的方法:serverCron
int serverCron(struct aeEventLoop *eventLoop, PORT_LONGLONG id, void *clientData)
四、RDB文件結構
| REDIS | db_version | database | EOF | check_sum |
RDB文件開頭是REDIS,來判定是否是RDB文件。
db_version 版本號
databse 包含任意多個數據庫(鍵值對)
EOF RDB文件結束標誌
check_sum 校驗長度
Redis 設計與實現 (三)