日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
RedisRDB持久化方式

Redis 有兩種持久化方案,RDB (Redis DataBase)和 AOF (Append Only File),本篇文章重點為大家講解一下Redis RDB 持久化方式。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、成都小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了蔚縣免費建站歡迎大家使用!

RDB 持久化

RDB 持久化既可以手動執(zhí)行,也可以根據(jù)服務(wù)器配置選項定期執(zhí)行,該功能可以將某個時間點上的數(shù)據(jù)庫狀態(tài)保存到一個 RDB 文件中 RDB 持久化功能所生成的 RDB 文件是一個經(jīng)過壓縮的二進制文件,通過該文件可以還原生成 RDB 文件時的數(shù)據(jù)庫狀態(tài)

RDB 文件的創(chuàng)建與載入

有兩個 Redis 命令可以用于生成 RDB 文件,一個是 SAVE,另一個是 BGSAVE SAVE 命令會阻塞 Redis 服務(wù)器進程,直到 RDB 文件創(chuàng)建完畢為止,在服務(wù)器進程阻塞期間,服務(wù)器不能處理任何命令請求

BGSAVE 命令會派生出一個子進程,然后由子進程負(fù)責(zé)創(chuàng)建 RDB 文件,父進程繼續(xù)處理命令請求

RDB 文件的載入工作是在服務(wù)啟動時自動執(zhí)行的,所以 Redis 并沒有專門用于載入 RDB 文件的命令,只要 Redis 服務(wù)器在啟動時檢測到 RDB 文件存在,它就會自動載入 RDB 文件

因為 AOF 文件的更新頻率通常比 RDB 文件的更新頻率高,所以如果服務(wù)器開啟了 AOF 持久化功能,那么服務(wù)器會優(yōu)先使用 AOF 文件來還原數(shù)據(jù)庫狀態(tài) 只有在 AOF 持久化功能處于關(guān)閉狀態(tài)時,服務(wù)器才會使用 RDB 文件來還原數(shù)據(jù)庫狀態(tài)

SAVE 命令執(zhí)行時的服務(wù)器狀態(tài):

當(dāng) SAVE 命令執(zhí)行時,Redis 服務(wù)器會被阻塞,所以當(dāng) SAVE 命令正在執(zhí)行時,客戶端發(fā)送的所有命令請求都會被拒絕

只有在服務(wù)器執(zhí)行完 SAVE 命令、重新開始接受命令請求之后,客戶端發(fā)送的命令才會被處理

BGSAVE 命令執(zhí)行時的服務(wù)器狀態(tài):

子進程創(chuàng)建 RDB 文件的過程中,Redis 服務(wù)器仍然可以繼續(xù)處理客戶端的命令請求,但是,在 BGSAVE 命令執(zhí)行期間,服務(wù)器處理 SAVE、BGSAVE、BGREWRITEAOF 三個命令的方式會和平時有所不同

首先,在 BGSAVE 命令執(zhí)行期間,客戶端發(fā)送的 SAVE 命令會被服務(wù)器拒絕,服務(wù)器禁止 SAVE 命令和 BGSAVE 命令同時執(zhí)行是為了避免父進程和子進程同時執(zhí)行兩個 rdbSave 調(diào)用,防止產(chǎn)生競爭條件

其次,在 BGSAVE 命令執(zhí)行期間,客戶端發(fā)送的 BGSAVE 命令會被服務(wù)器拒絕,因為同時執(zhí)行兩個 BGSAVE 命令也會產(chǎn)生競爭條件

最后,BGREWRITEAOF 和 BGSAVE 兩個命令不能同時執(zhí)行

如果 BGSAVE 命令正在執(zhí)行,那么客戶端發(fā)送的 BGREWRITEAOF 命令會被延遲到 BGSAVE 命令執(zhí)行完畢之后執(zhí)行

如果 BGREWRITEAOF 命令正在執(zhí)行,那么客戶端發(fā)送的 BGSAVE 命令會被服務(wù)器拒絕

因為 BGREWRITEAOF 和 BGSAVE 兩個命令的實際工作都由子進程執(zhí)行,所以這兩個命令在操作方面并沒有什么沖突的地方,不能同時執(zhí)行它們只是一個性能方面的考慮一一并發(fā)出兩個子進程,并且這兩個子進程都同時執(zhí)行大量的磁盤寫入操作

RDB 文件載入時的服務(wù)器狀態(tài): 服務(wù)器在載入RDB 文件期間,會一直處于阻塞狀態(tài),直到載入工作完成為止

自動間隔性保存

因為 BGSAVE 命令可以在不阻塞服務(wù)器進程的情況下執(zhí)行,所以 Redis 允許用戶通過設(shè)置服務(wù)器配置的 save 選項,讓服務(wù)器每隔一段時間自動執(zhí)行一次 BGSAVE 命令

用戶可以通過 save 選項設(shè)置多個保存條件,但只要其中任意一個條件被滿足,服務(wù)器就會執(zhí)行 BGSAVE 命令 舉個例子,如果我們向服務(wù)器提供以下配置:

save 900 1
save 300 10
save 60 10000

那么只要滿足以下三個條件中的任意一個,BGSAVE 命令就會被執(zhí)行:

服務(wù)器在 900 秒之內(nèi),對數(shù)據(jù)庫進行了至少 1 次修改

服務(wù)器在 300 秒之內(nèi),對數(shù)據(jù)庫進行了至少 10 次修改

服務(wù)器在 60 秒之內(nèi),對數(shù)據(jù)庫進行了至少 10000 次修改

設(shè)置保存條件

通過設(shè)置 Redis 服務(wù)器配置的 save 選項,可以讓服務(wù)器每隔一段時間自動執(zhí)行一次 BGSAVE 命令;可以配置多個規(guī)則,只要滿足其中一個規(guī)則就執(zhí)行

服務(wù)器程序會根據(jù) save 選項設(shè)置服務(wù)器狀態(tài) redisServer 結(jié)構(gòu)的 saveparams 屬性

saveparams 屬性是一個數(shù)組,數(shù)組中每個元素都是一個 saveparam 結(jié)構(gòu):

默認(rèn)的保存條件數(shù)據(jù)結(jié)構(gòu)如下:

dirty 計數(shù)器和 lastsave 屬性

服務(wù)器狀態(tài)還維護著一個 dirty 計數(shù)器,以及一個 lastsave 屬性:

dirty 計數(shù)器記錄距離上一次成功執(zhí)行 SAVE 命令或者 BGSAVE 命令之后,服務(wù)器對數(shù)據(jù)庫狀態(tài)進行了多少次修改(包括寫入、刪除、更新等操作)

lastsave 屬性是一個 UNIX 時間戳,記錄了服務(wù)器上一次成功執(zhí)行 SAVE 命令或者 BGSAVE 命令的時間

當(dāng)服務(wù)器成功執(zhí)行一個數(shù)據(jù)庫修改命令之后,程序就會對 dirty 計數(shù)器進行更新:命令修改了多少次數(shù)據(jù)庫 dirty 計數(shù)器的值就增加多少

檢查保存條件是否滿足

Redis 的服務(wù)器周期性操作函數(shù) serverCron 默認(rèn)每隔 100 毫秒就會執(zhí)行一次,該函數(shù)用于對正在運行的服務(wù)器進行維護,它的其中一項工作就是檢查 save 選項所設(shè)置的保存條件是否已經(jīng)滿足,如果滿足的話,就執(zhí)行 BGSAVE 命令

算法實現(xiàn): 遍歷并檢查 saveparams 數(shù)組中所有的保存條件,逐一與服務(wù)器狀態(tài)的 dirty 屬性和 lastsave 屬性進行比較,只要有任意一個條件滿足就執(zhí)行 BGSAVE 命令


當(dāng)前名稱:RedisRDB持久化方式
文章分享:http://www.dlmjj.cn/article/coeecih.html