Redis 持久化機(jī)制RDB蕊爵、AOF

磁盤持久化

redis的持久化指的是redis會(huì)把內(nèi)存的中的數(shù)據(jù)寫入到硬盤中辉哥,在redis重新啟動(dòng)的時(shí)候加載這些數(shù)據(jù),從而最大限度的降低緩存丟失帶來(lái)的影響攒射。

RDB(Redis database)模型

RDB在指定的時(shí)間間隔保存數(shù)據(jù)快照证薇。它們非常適合快速恢復(fù)備份。
將內(nèi)存中數(shù)據(jù)以快照的方式寫入到二進(jìn)制文件中,默認(rèn)的文件名為dump.rdb匆篓。

觸發(fā)機(jī)制

1. save

該命令會(huì)阻塞當(dāng)前Redis服務(wù)器,執(zhí)行save命令期間寇窑,Redis不能處理其他命令鸦概,直到RDB過(guò)程完成為止。執(zhí)行完成時(shí)候如果存在老的RDB文件甩骏,就把新的替代掉舊的窗市。


image.png
2. bgsave

執(zhí)行該命令時(shí),Redis會(huì)在后臺(tái)異步進(jìn)行快照操作饮笛,快照同時(shí)還可以響應(yīng)客戶端請(qǐng)求咨察。具體操作是Redis進(jìn)程執(zhí)行fork操作創(chuàng)建子進(jìn)程,RDB持久化過(guò)程由子進(jìn)程負(fù)責(zé)福青,完成后自動(dòng)結(jié)束摄狱。阻塞只發(fā)生在fork階段,一般時(shí)間很短无午∶揭郏基本上 Redis 內(nèi)部所有的RDB操作都是采用 bgsave 命令。


image.png
3. 自動(dòng)觸發(fā)

自動(dòng)觸發(fā)是由我們的配置文件來(lái)完成的宪迟。在redis.conf配置文件中酣衷,里面有如下配置,我們可以去設(shè)置:
①save:這里是用來(lái)配置觸發(fā) Redis的 RDB 持久化條件次泽,也就是什么時(shí)候?qū)?nèi)存中的數(shù)據(jù)保存到硬盤穿仪。比如“save m n”席爽。表示m秒內(nèi)數(shù)據(jù)集存在n次修改時(shí),自動(dòng)觸發(fā)bgsave啊片。

表示900 秒內(nèi)如果至少有 1 個(gè) key 的值變化只锻,則保存save 900 1#表示300 秒內(nèi)如果至少有 10 個(gè) key 的值變化,則保存save 300 10#表示60 秒內(nèi)如果至少有 10000 個(gè) key 的值變化钠龙,則保存save 60 10000

不需要持久化炬藤,那么你可以注釋掉所有的 save 行來(lái)停用保存功能。
②stop-writes-on-bgsave-error :默認(rèn)值為yes碴里。當(dāng)啟用了RDB且最后一次后臺(tái)保存數(shù)據(jù)失敗沈矿,Redis是否停止接收數(shù)據(jù)。這會(huì)讓用戶意識(shí)到數(shù)據(jù)沒(méi)有正確持久化到磁盤上咬腋,否則沒(méi)有人會(huì)注意到災(zāi)難(disaster)發(fā)生了羹膳。如果Redis重啟了,那么又可以重新開始接收數(shù)據(jù)了
③rdbcompression 根竿;默認(rèn)值是yes陵像。對(duì)于存儲(chǔ)到磁盤中的快照,可以設(shè)置是否進(jìn)行壓縮存儲(chǔ)寇壳。
④rdbchecksum :默認(rèn)值是yes醒颖。在存儲(chǔ)快照后,我們還可以讓redis使用CRC64算法來(lái)進(jìn)行數(shù)據(jù)校驗(yàn)壳炎,但是這樣做會(huì)增加大約10%的性能消耗泞歉,如果希望獲取到最大的性能提升,可以關(guān)閉此功能匿辩。
⑤dbfilename :設(shè)置快照的文件名腰耙,默認(rèn)是 dump.rdb
⑥dir:設(shè)置快照文件的存放路徑,這個(gè)配置項(xiàng)一定是個(gè)目錄铲球,而不能是文件名挺庞。

save、bgsave差異

image.png

RDB優(yōu)勢(shì)稼病、劣勢(shì)

①选侨、優(yōu)勢(shì)
(1)RDB文件緊湊,全量備份溯饵,非常適合用于進(jìn)行備份和災(zāi)難恢復(fù)侵俗。
(2)生成RDB文件的時(shí)候,redis主進(jìn)程會(huì)fork()一個(gè)子進(jìn)程來(lái)處理所有保存工作丰刊,主進(jìn)程不需要進(jìn)行任何磁盤IO操作隘谣。
(3)RDB 在恢復(fù)大數(shù)據(jù)集時(shí)的速度比 AOF 的恢復(fù)速度要快。
②、劣勢(shì)
RDB快照是一次全量備份寻歧,存儲(chǔ)的是內(nèi)存數(shù)據(jù)的二進(jìn)制序列化形式掌栅,存儲(chǔ)上非常緊湊。當(dāng)進(jìn)行快照持久化時(shí)码泛,會(huì)開啟一個(gè)子進(jìn)程專門負(fù)責(zé)快照持久化猾封,子進(jìn)程會(huì)擁有父進(jìn)程的內(nèi)存數(shù)據(jù),父進(jìn)程修改內(nèi)存子進(jìn)程不會(huì)反應(yīng)出來(lái)噪珊,所以在快照持久化期間修改的數(shù)據(jù)不會(huì)被保存晌缘,可能丟失數(shù)據(jù)。

AOF(Append only file)模型

全量備份總是耗時(shí)的痢站,有時(shí)候我們提供一種更加高效的方式AOF磷箕,工作機(jī)制很簡(jiǎn)單,redis會(huì)將每一個(gè)收到的寫命令都通過(guò)write函數(shù)追加到文件中阵难。通俗的理解就是日志記錄岳枷。

原理

每當(dāng)有一個(gè)寫命令過(guò)來(lái)時(shí),就直接保存在我們的AOF文件中呜叫。


image.png

文件重寫原理

AOF的方式也同時(shí)帶來(lái)了另一個(gè)問(wèn)題空繁。持久化文件會(huì)變的越來(lái)越大。為了壓縮aof的持久化文件朱庆。redis提供了bgrewriteaof命令盛泡。將內(nèi)存中的數(shù)據(jù)以命令的方式保存到臨時(shí)文件中,同時(shí)會(huì)fork出一條新進(jìn)程來(lái)將文件重寫娱颊。


image.png

重寫aof文件的操作饭于,并沒(méi)有讀取舊的aof文件,而是將整個(gè)內(nèi)存中的數(shù)據(jù)庫(kù)內(nèi)容用命令的方式重寫了一個(gè)新的aof文件维蒙,這點(diǎn)和快照有點(diǎn)類似。

觸發(fā)機(jī)制

  1. 每修改同步always:同步持久化 每次發(fā)生數(shù)據(jù)變更會(huì)被立即記錄到磁盤 性能較差但數(shù)據(jù)完整性比較好
  2. 每秒同步everysec:異步操作果覆,每秒記錄 如果一秒內(nèi)宕機(jī)颅痊,有數(shù)據(jù)丟失
  3. 不同no:從不同步


    image.png

優(yōu)點(diǎn)

  1. AOF可以更好的保護(hù)數(shù)據(jù)不丟失,一般AOF會(huì)每隔1秒局待,通過(guò)一個(gè)后臺(tái)線程執(zhí)行一次fsync操作斑响,最多丟失1秒鐘的數(shù)據(jù)。
  2. AOF日志文件沒(méi)有任何磁盤尋址的開銷钳榨,寫入性能非常高舰罚,文件不容易破損。
  3. AOF日志文件即使過(guò)大的時(shí)候薛耻,出現(xiàn)后臺(tái)重寫操作营罢,也不會(huì)影響客戶端的讀寫。
  4. AOF日志文件的命令通過(guò)非常可讀的方式進(jìn)行記錄饲漾,這個(gè)特性非常適合做災(zāi)難性的誤刪除的緊急恢復(fù)蝙搔。

比如某人不小心用flushall命令清空了所有數(shù)據(jù),只要這個(gè)時(shí)候后臺(tái)rewrite還沒(méi)有發(fā)生考传,那么就可以立即拷貝AOF文件吃型,將最后一條flushall命令給刪了,然后再將該AOF文件放回去僚楞,就可以通過(guò)恢復(fù)機(jī)制勤晚,自動(dòng)恢復(fù)所有數(shù)據(jù)

缺點(diǎn)

  1. 對(duì)于同一份數(shù)據(jù)來(lái)說(shuō),AOF日志文件通常比RDB數(shù)據(jù)快照文件更大
  2. AOF開啟后泉褐,支持的寫QPS會(huì)比RDB支持的寫QPS低赐写,因?yàn)锳OF一般會(huì)配置成每秒fsync一次日志文件,當(dāng)然兴枯,每秒一次fsync血淌,性能也還是很高的
  3. 以前AOF發(fā)生過(guò)bug,就是通過(guò)AOF記錄的日志财剖,進(jìn)行數(shù)據(jù)恢復(fù)的時(shí)候悠夯,沒(méi)有恢復(fù)一模一樣的數(shù)據(jù)出來(lái)。

RDB和AOF到底該如何選擇

選擇的話躺坟,兩者加一起才更好沦补。因?yàn)閮蓚€(gè)持久化機(jī)制你明白了,剩下的就是看自己的需求了咪橙,需求不同選擇的也不一定夕膀,但是通常都是結(jié)合使用。有一張圖可供總結(jié):


image.png

轉(zhuǎn)載:https://baijiahao.baidu.com/s?id=1654694618189745916&wfr=spider&for=pc

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末美侦,一起剝皮案震驚了整個(gè)濱河市产舞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌菠剩,老刑警劉巖易猫,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異具壮,居然都是意外死亡准颓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門棺妓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)攘已,“玉大人,你說(shuō)我怎么就攤上這事怜跑⊙” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)彤灶。 經(jīng)常有香客問(wèn)我看幼,道長(zhǎng),這世上最難降的妖魔是什么幌陕? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任诵姜,我火速辦了婚禮,結(jié)果婚禮上搏熄,老公的妹妹穿的比我還像新娘棚唆。我一直安慰自己,他們只是感情好心例,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布宵凌。 她就那樣靜靜地躺著,像睡著了一般止后。 火紅的嫁衣襯著肌膚如雪瞎惫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天译株,我揣著相機(jī)與錄音瓜喇,去河邊找鬼。 笑死歉糜,一個(gè)胖子當(dāng)著我的面吹牛乘寒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播匪补,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼伞辛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了夯缺?” 一聲冷哼從身側(cè)響起蚤氏,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踊兜,沒(méi)想到半個(gè)月后瞧捌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡润文,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了殿怜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片典蝌。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖头谜,靈堂內(nèi)的尸體忽然破棺而出骏掀,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布截驮,位于F島的核電站笑陈,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏葵袭。R本人自食惡果不足惜涵妥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坡锡。 院中可真熱鬧蓬网,春花似錦、人聲如沸鹉勒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)禽额。三九已至锯厢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脯倒,已是汗流浹背实辑。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盔憨,地道東北人徙菠。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像郁岩,于是被迫代替她去往敵國(guó)和親婿奔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容