1、rdb持久化功能將內(nèi)存數(shù)據(jù)保存到磁盤上掌桩,避免數(shù)據(jù)意外丟失姑食,rdb文件是一個(gè)經(jīng)過壓縮的二進(jìn)制文件,可以還原內(nèi)存數(shù)據(jù)狀態(tài)
2则拷、redis文件的創(chuàng)建與載入
2.1曹鸠、save bgsave
2.2、save命令會(huì)阻塞redis服務(wù)器進(jìn)程坛善,直到rdb文件創(chuàng)建完畢為止,不會(huì)接受任務(wù)命令請(qǐng)求
2.3眠屎、bgsave會(huì)派生一個(gè)子進(jìn)程,然后子進(jìn)程負(fù)責(zé)創(chuàng)建rdb文件岖常,可以繼續(xù)處理命令請(qǐng)求
創(chuàng)建rdb文件實(shí)際由rdbsave函數(shù)完成
2.4燎字、rdb載入工作是在服務(wù)器啟動(dòng)時(shí)自動(dòng)執(zhí)行,并沒有專門的命令載入笼蛛,載入期間蛉鹿,一直阻塞其他命令
3.5、aof文件的更新頻率比rdb文件更新頻率高惋戏,所以如果服務(wù)器開啟了aof持久化功能他膳,優(yōu)先使用aof文件來還原數(shù)據(jù)庫轉(zhuǎn)態(tài),aof功能關(guān)閉狀態(tài)時(shí)舔亭,服務(wù)器才會(huì)使用rdb文件還原數(shù)據(jù)庫狀態(tài)
bgsave命令執(zhí)行時(shí)候蟀俊,拒絕下一個(gè)bgsave
bgrewiteaof 和bgsave不能同時(shí)執(zhí)行,會(huì)拒絕下一個(gè)
4肢预、自動(dòng)間隔保存
save 900 1 ,900秒內(nèi)烫映,對(duì)數(shù)據(jù)庫進(jìn)行了至少一次修改,保存在saveparams 數(shù)組中
4.1锭沟、dirty計(jì)數(shù)器 lastsave屬性
dirty計(jì)數(shù)器保存了上一次save或者bgsave后冈钦,對(duì)數(shù)據(jù)庫狀態(tài)進(jìn)行了多少次修改李请,包括寫入厉熟,刪除,更新
lastsave保存上一次save或者bgsave的unix時(shí)間戳
4.2白翻、檢查保存的條件 saveparams是否滿足绢片,servercron每100毫秒執(zhí)行一次
5、rdb文件結(jié)構(gòu) REDIS db_version databases EOF check_sum
開頭是5字節(jié)巢株,REDIS字符熙涤,快速檢查載入的是否是RDB文件
db_version 長度4字節(jié),值是一個(gè)字符串表示的整數(shù)記錄了rdb版本號(hào)
databases包含零個(gè)或任意多個(gè)數(shù)據(jù)庫祠挫,以及各個(gè)數(shù)據(jù)庫中的鍵值對(duì)數(shù)據(jù)等舔,如果服務(wù)器的數(shù)據(jù)庫,所有的庫慌植,為空,那么這部分也是空
EOF 長度為1字節(jié),標(biāo)志著rdb文件正文內(nèi)容的結(jié)束
check_sum 8字節(jié)只锭,保存著一個(gè)校驗(yàn)和院尔,通過前面四個(gè)部分內(nèi)容計(jì)算得出,檢查文件是否有損壞
6纵顾、databases部分栋盹,如果0號(hào)和3號(hào)為非空,那么database0 保存著0號(hào)數(shù)據(jù)庫中所有的鍵值對(duì)汉额,database3保存著3號(hào)數(shù)據(jù)庫中所有的鍵值對(duì)
每個(gè)非空數(shù)據(jù)庫的rdb文件都可以保存為selectdb db_number key_value_pairs三個(gè)部分
selectdb常量長度為1字節(jié),當(dāng)程序遇到這個(gè)值時(shí)候蠕搜,它知道接下來要讀的將是數(shù)據(jù)庫號(hào)碼
db_number保存著一個(gè)數(shù)據(jù)庫號(hào)碼妓灌,根據(jù)號(hào)碼的大小不同,長度可以是1 2 5 字節(jié)虫埂,讀入db_nuber后告丢,服務(wù)器會(huì)立即調(diào)用select命令,切換數(shù)據(jù)庫岖免,key_value_pairs保存著所有的鍵值對(duì),根據(jù)鍵值對(duì)的數(shù)量 類型 內(nèi)容 以及是否有過期時(shí)間的不同话侧,key_value_pairs長度也會(huì)有所不同
7闯参、key_value_pairs type 1字節(jié) key value三部分組成
帶有過期時(shí)間的 expiretime_ms常量 1字節(jié),告知讀入程序接下來將是一個(gè)以毫秒為單位的過期時(shí)間 ms 8字節(jié)長的帶符號(hào)整數(shù)新博,記錄一個(gè)以毫秒為單位的unix時(shí)間戳