redis——RDB持久化

簡介

RDB是Redis用來進行持久化的一種方式掩完,是把當前內存中的數(shù)據集快照寫入磁盤盛末,也就是 Snapshot 快照(數(shù)據庫中所有鍵值對數(shù)據)绵患。恢復時是將快照文件直接讀到內存里夷陋。

備份是如何執(zhí)行的

Redis會單獨創(chuàng)建(fork)一個子進程來進行持久化,會先將數(shù)據寫入到 一個臨時文件中胰锌,待持久化過程都結束了骗绕,再用這個臨時文件替換上次持久化好的文件。 整個過程中资昧,主進程是不進行任何IO操作的酬土,這就確保了極高的性能 如果需要進行大規(guī)模數(shù)據的恢復,且對于數(shù)據恢復的完整性不是非常敏感格带,那RDB方式要比AOF方式更加的高效撤缴。RDB的缺點是最后一次持久化后的數(shù)據可能丟失

Fork

  • Fork的作用是復制一個與當前進程一樣的進程叽唱。新進程的所有數(shù)據(變量屈呕、環(huán)境變量、程序計數(shù)器等) 數(shù)值都和原進程一致棺亭,但是是一個全新的進程虎眨,并作為原進程的子進程。
  • 在Linux程序中侦铜,fork()會產生一個和父進程完全相同的子進程专甩,但子進程在此后多會exec系統(tǒng)調用,出于效率考慮钉稍,Linux中引入了寫時復制技術涤躲。
  • 一般情況父進程和子進程會共用同一段物理內存,只有進程空間的各段的內容要發(fā)生變化時贡未,才會將父進程的內容復制一份給子進程种樱。

RDB持久化流程

RDB持久化流程

dump.rdb文件

redis.conf中配置文件名稱,默認為dump.rdb俊卤,rdb文件的保存路徑嫩挤,也可以修改。默認為Redis啟動時命令行所在的目錄下消恍。

觸發(fā)方式

RDB 有兩種觸發(fā)方式岂昭,分別是自動觸發(fā)和手動觸發(fā)。

①狠怨、自動觸發(fā)

在 redis.conf 配置文件中的 SNAPSHOTTING 下约啊。


image.png
  • save:這里是用來配置觸發(fā) Redis的 RDB 持久化條件邑遏,也就是什么時候將內存中的數(shù)據保存到硬盤。比如“save m n”恰矩。表示m秒內數(shù)據集存在n次修改時记盒,自動觸發(fā)bgsave(這個命令下面會介紹,手動觸發(fā)RDB持久化的命令)外傅。當然如果你只是用Redis的緩存功能纪吮,不需要持久化,那么你可以注釋掉所有的 save 行來停用保存功能萎胰∧朊耍可以直接一個空字符串來實現(xiàn)停用:save ""
    默認如下配置:
save 900 1:表示900 秒內如果至少有 1 個 key 的值變化,則保存
save 300 10:表示300 秒內如果至少有 10 個 key 的值變化奥洼,則保存
save 60 10000:表示60 秒內如果至少有 10000 個 key 的值變化巷疼,則保存
  • stop-writes-on-bgsave-error:默認值為yes。當啟用了RDB且最后一次后臺保存數(shù)據失敗灵奖,Redis是否停止接收數(shù)據嚼沿。這會讓用戶意識到數(shù)據沒有正確持久化到磁盤上,否則沒有人會注意到災難(disaster)發(fā)生了瓷患。如果Redis重啟了骡尽,那么又可以重新開始接收數(shù)據了。
  • rdbcompression:默認值是yes擅编。對于存儲到磁盤中的快照攀细,可以設置是否進行壓縮存儲。如果是的話爱态,redis會采用LZF算法進行壓縮谭贪。如果你不想消耗CPU來進行壓縮的話,可以設置為關閉此功能锦担,但是存儲在磁盤上的快照會比較大俭识。
  • rdbchecksum :默認值是yes。在存儲快照后洞渔,我們還可以讓redis使用CRC64算法來進行數(shù)據校驗套媚,但是這樣做會增加大約10%的性能消耗,如果希望獲取到最大的性能提升磁椒,可以關閉此功能堤瘤。
  • dbfilename :設置快照的文件名,默認是 dump.rdb浆熔。
  • dir:設置快照文件的存放路徑本辐,這個配置項一定是個目錄,而不能是文件名。默認是和當前配置文件保存在同一目錄慎皱。
  • 也就是說通過在配置文件中配置的save方式环葵,當實際操作滿足該配置形式時就會進行RDB 持久化,將當前的內存快照保存在 dir配置的目錄中宝冕,文件名由配置的 dbfilename決定。

②邓萨、手動觸發(fā)

  • save:該命令會阻塞當前Redis服務器地梨,執(zhí)行save命令期間,Redis不能處理其他命令缔恳,直到RDB過程完成為止宝剖。顯然該命令對于內存比較大的實例會造成長時間阻塞,這是致命的缺陷歉甚,為了解決此問題万细,Redis提供了第二種方式。
  • bgsave:執(zhí)行該命令時纸泄,Redis會在后臺異步進行快照操作赖钞,快照同時還可以響應客戶端請求。具體操作是Redis進程執(zhí)行fork操作創(chuàng)建子進程聘裁,RDB持久化過程由子進程負責雪营,完成后自動結束。阻塞只發(fā)生在fork階段衡便,一般時間很短献起。基本上 Redis 內部所有的RDB操作都是采用 bgsave 命令,可以通過lastsave 命令獲取最后一次成功執(zhí)行快照的時間镣陕。

ps:執(zhí)行執(zhí)行 flushall命令谴餐,也會產生dump.rdb文件,但里面是空的呆抑。

備份與恢復

  1. 可以先通過config get dir命令獲取redis 的安裝目錄岂嗓。
  2. 將備份文件 (dump.rdb) 移動到 redis 安裝目錄并啟動服務即可,redis就會自動加載文件數(shù)據至內存了理肺。Redis 服務器在載入 RDB 文件期間摄闸,會一直處于阻塞狀態(tài),直到載入工作完成為止妹萨。
    看到如下標識年枕,說明加載成功:
    image.png

RDB 的優(yōu)勢和劣勢

優(yōu)勢
  • RDB是一個非常緊湊(compact)的文件,它保存了redis 在某個時間點上的數(shù)據集乎完。這種文件非常適合用于進行備份和災難恢復熏兄。
  • 生成RDB文件的時候,redis主進程會fork()一個子進程來處理所有保存工作,主進程不需要進行任何磁盤IO操作摩桶。
  • RDB 在恢復大數(shù)據集時的速度比 AOF 的恢復速度要快桥状。
劣勢
  • RDB方式數(shù)據沒辦法做到實時持久化/秒級持久化。因為bgsave每次運行都要執(zhí)行fork操作創(chuàng)建子進程硝清,屬于重量級操作辅斟,如果不采用壓縮算法(內存中的數(shù)據被克隆了一份,大致2倍的膨脹性需要考慮)芦拿,頻繁執(zhí)行成本過高(影響性能)士飒。
  • RDB文件使用特定二進制格式保存,Redis版本演進過程中有多個格式的RDB版本蔗崎,存在老版本Redis服務無法兼容新版RDB格式的問題(版本不兼容)酵幕。
  • 在一定間隔時間做一次備份,所以如果redis意外down掉的話缓苛,就會丟失最后一次快照后的所有修改(數(shù)據有丟失)芳撒。

總結

image.png
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市未桥,隨后出現(xiàn)的幾起案子笔刹,更是在濱河造成了極大的恐慌,老刑警劉巖钢属,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件徘熔,死亡現(xiàn)場離奇詭異,居然都是意外死亡淆党,警方通過查閱死者的電腦和手機酷师,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來染乌,“玉大人山孔,你說我怎么就攤上這事『杀铮” “怎么了台颠?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長勒庄。 經常有香客問我串前,道長,這世上最難降的妖魔是什么实蔽? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任荡碾,我火速辦了婚禮,結果婚禮上局装,老公的妹妹穿的比我還像新娘坛吁。我一直安慰自己劳殖,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布拨脉。 她就那樣靜靜地躺著哆姻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪玫膀。 梳的紋絲不亂的頭發(fā)上矛缨,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音帖旨,去河邊找鬼劳景。 笑死,一個胖子當著我的面吹牛碉就,可吹牛的內容都是我干的。 我是一名探鬼主播闷串,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼瓮钥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了烹吵?” 一聲冷哼從身側響起碉熄,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肋拔,沒想到半個月后锈津,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡凉蜂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年琼梆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窿吩。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡茎杂,死狀恐怖,靈堂內的尸體忽然破棺而出纫雁,到底是詐尸還是另有隱情煌往,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布轧邪,位于F島的核電站刽脖,受9級特大地震影響,放射性物質發(fā)生泄漏忌愚。R本人自食惡果不足惜曲管,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望菜循。 院中可真熱鬧翘地,春花似錦申尤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至橙喘,卻和暖如春时鸵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背厅瞎。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工饰潜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人和簸。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓彭雾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親锁保。 傳聞我的和親對象是個殘疾皇子薯酝,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容