redis持久化之RDB持久化


由於redis是內存數據庫,它將本身的數據庫狀態儲存在內存裏面,若是服務器進程退出,服務器的數據庫狀態就會消失不見。爲了解決這個問題,redis提供了rdb持久化,這個功能就是將redis在內存的數據庫狀態存到磁盤裏。redis

一.RDB文件的建立與載入

1.1 RDB文件的建立

redis有兩個命令用於建立RDB文件,分別是SAVE 和 BGSAVE.數據庫

SAVE命令會阻塞當前服務器進程,知道RDB文件建立完成爲止,期間redis服務器不接受任何其餘命令;服務器

BGSAVE命令不會阻塞當前服務器進程,而是經過fork一個子進程,由這個子進程來建立RDB文件,服務器進程繼續執行命令。blog

1.2 RDB文件的載入

RDB文件載入並無命令去執行,它是在每次服務器啓動的時候,只要檢測到RDB文件的存在,就會去載入。進程

須要注意的是,若是服務器開啓了AOF持久化,優先用AOF文件來加載,以下圖所示:內存

前面提到過,當save命令執行時,redis服務器會被阻塞,因此當save命令正在執行時,客戶端發送的全部命令請求都會被拒絕。只有服務器在執行完save命令,從新開始接受命令請求以後,客戶端it

發送的命令纔會被處理。配置

而bgsave命令在執行時,redis服務器還會繼續處理客戶端的命令請求,可是在bgsave命令執行期間,服務器處理save,bgsave,bgrewriteaof三個命令的方式和平時會有點不一樣。請求

1.bgsave命令執行期間,客戶端發送的save命令會被拒絕im

2.bgsave命令執行期間,客戶端發送的bgsave命令會被拒絕

3.最後bgrewriteaof和bgsave不能同時執行,若是bgrewriteaof正在執行,客戶端發送的bgsave命令會被服務器拒絕,若是basave正在執行,那麼客戶端發送的BGREWRITEAOF命令會被延遲到BGSAVE命令執行完畢以後執行。

1.3 RDB文件載入時的服務器狀態

服務器在載入rdb文件期間,會一直處於阻塞狀態,直到載入工做完成爲止。

1.4 自動間隔性保存

redis容許用戶經過設置服務器配置的save選項,讓服務器每一個一段時間自動執行一次BGSAVE命令。好比:save 900 1save 300 10save 60 10000

相關文章
相關標籤/搜索