redis(9)rdb持久化

1、rdb持久化功能將內(nèi)存數(shù)據(jù)保存到磁盤上,避免數(shù)據(jù)意外丟失,rdb文件是一個(gè)經(jīng)過(guò)壓縮的二進(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í)行,并沒(méi)有專門的命令載入,載入期間,一直阻塞其他命令

3.5、aof文件的更新頻率比rdb文件更新頻率高,所以如果服務(wù)器開啟了aof持久化功能,優(yōu)先使用aof文件來(lái)還原數(shù)據(jù)庫(kù)轉(zhuǎn)態(tài),aof功能關(guān)閉狀態(tài)時(shí),服務(wù)器才會(huì)使用rdb文件還原數(shù)據(jù)庫(kù)狀態(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ù)庫(kù)進(jìn)行了至少一次修改,保存在saveparams 數(shù)組中

4.1、dirty計(jì)數(shù)器 lastsave屬性

dirty計(jì)數(shù)器保存了上一次save或者bgsave后,對(duì)數(shù)據(jù)庫(kù)狀態(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 長(zhǎng)度4字節(jié),值是一個(gè)字符串表示的整數(shù)記錄了rdb版本號(hào)

databases包含零個(gè)或任意多個(gè)數(shù)據(jù)庫(kù),以及各個(gè)數(shù)據(jù)庫(kù)中的鍵值對(duì)數(shù)據(jù),如果服務(wù)器的數(shù)據(jù)庫(kù),所有的庫(kù),為空,那么這部分也是空

EOF 長(zhǎng)度為1字節(jié),標(biāo)志著rdb文件正文內(nèi)容的結(jié)束

check_sum 8字節(jié),保存著一個(gè)校驗(yàn)和,通過(guò)前面四個(gè)部分內(nèi)容計(jì)算得出,檢查文件是否有損壞

6、databases部分,如果0號(hào)和3號(hào)為非空,那么database0 保存著0號(hào)數(shù)據(jù)庫(kù)中所有的鍵值對(duì),database3保存著3號(hào)數(shù)據(jù)庫(kù)中所有的鍵值對(duì)

每個(gè)非空數(shù)據(jù)庫(kù)的rdb文件都可以保存為selectdb db_number key_value_pairs三個(gè)部分

selectdb常量長(zhǎng)度為1字節(jié),當(dāng)程序遇到這個(gè)值時(shí)候,它知道接下來(lái)要讀的將是數(shù)據(jù)庫(kù)號(hào)碼

db_number保存著一個(gè)數(shù)據(jù)庫(kù)號(hào)碼,根據(jù)號(hào)碼的大小不同,長(zhǎng)度可以是1 2 5 字節(jié),讀入db_nuber后,服務(wù)器會(huì)立即調(diào)用select命令,切換數(shù)據(jù)庫(kù),key_value_pairs保存著所有的鍵值對(duì),根據(jù)鍵值對(duì)的數(shù)量 類型 內(nèi)容 以及是否有過(guò)期時(shí)間的不同,key_value_pairs長(zhǎng)度也會(huì)有所不同

7、key_value_pairs type 1字節(jié) key value三部分組成

帶有過(guò)期時(shí)間的 expiretime_ms常量 1字節(jié),告知讀入程序接下來(lái)將是一個(gè)以毫秒為單位的過(guò)期時(shí)間 ms 8字節(jié)長(zhǎng)的帶符號(hào)整數(shù),記錄一個(gè)以毫秒為單位的unix時(shí)間戳

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Redis高可用概述 在介紹Redis高可用之前,先說(shuō)明一下在Redis的語(yǔ)境中高可用的含義。 我們知道,在w...
    空語(yǔ)閱讀 1,679評(píng)論 0 2
  • Redis是一個(gè)鍵值對(duì)數(shù)據(jù)庫(kù)服務(wù)器,我們將服務(wù)器中的非空數(shù)據(jù)庫(kù)以及它們的鍵值對(duì)統(tǒng)稱為數(shù)據(jù)庫(kù)狀態(tài)。 Redis數(shù)據(jù)庫(kù)...
    Felicia1993閱讀 489評(píng)論 0 0
  • 企業(yè)級(jí)redis集群架構(gòu)的特點(diǎn) 海量數(shù)據(jù) 高并發(fā) 高可用 要達(dá)到高可用,持久化是不可減少的,持久化主要是做災(zāi)難恢復(fù)...
    lucode閱讀 2,280評(píng)論 0 7
  • Redis是一個(gè)鍵值對(duì)數(shù)據(jù)庫(kù)服務(wù)器,服務(wù)器中通常包含著任意個(gè)非空數(shù)據(jù)庫(kù),而每個(gè)非空數(shù)據(jù)庫(kù)中有可以包含任意個(gè)鍵值對(duì),...
    豬大金閱讀 332評(píng)論 0 0
  • 1.Redis特性 1)速度快:數(shù)據(jù)存放在內(nèi)存上、基于C語(yǔ)言實(shí)現(xiàn)、單線程架構(gòu)預(yù)防多線程競(jìng)爭(zhēng)問(wèn)題;2)基于鍵值對(duì)的數(shù)...
    Sponge1128閱讀 726評(píng)論 0 1

友情鏈接更多精彩內(nèi)容