1. 程式人生 > >Redis 設計與實現 (三)

Redis 設計與實現 (三)

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 設計與實現 (三)