2019-08-19 redis持久化面試問題

一尔破、持久化的分類

1.快照RBD

可以設(shè)置航夺,這個快照持久化是系統(tǒng)默認的持久化方式,通過手動設(shè)置n秒內(nèi)超過m個數(shù)據(jù)發(fā)生了變化万牺,那就自動做快照罗珍。

save 900 1 #900 秒內(nèi)如果超過 1 個 key 被修改,則發(fā)起快照保存

save 300 10 #300 秒內(nèi)容如超過 10 個 key 被修改脚粟,則發(fā)起快照保存

save 60 10000

2.AOF方式

? 由于快照方式是在一定間隔時間做一次的覆旱,所以如果 redis 意外 down 掉的話,就會丟失最后一次快照后的所有修改核无。如果應(yīng)用要求不能丟失任何修改的話扣唱,可以采用 aof 持久化方式。下面介紹 Append-only file:aof 比快照方式有更好的持久化性团南,是由于在使用 aof 持久化方式時,redis 會將每一個收到的寫命令都通過 write 函數(shù)追加到文件中(默認是 appendonly.aof)噪沙。當 redis 重啟時會通過重新執(zhí)行文件中保存的寫命令來在內(nèi)存中重建整個數(shù)據(jù)庫的內(nèi)容。當然由于 os 會在內(nèi)核中緩存 write 做的修改已慢,所以可能不是立即寫到磁盤上曲聂。這樣 aof 方式的持久化也還是有可能會丟失部分修改。不過我們可以通過配置文件告訴 redis 我們想要通過 fsync 函數(shù)強制 os 寫入到磁盤的時機佑惠。有三種方式如下(默認是:每秒 fsync 一次)

appendonly yes //啟用 aof 持久化方式

# appendfsync always //收到寫命令就立即寫入磁盤,最慢齐疙,但是保證完全的持久化

appendfsync everysec //每秒鐘寫入磁盤一次膜楷,在性能和持久化方面做了很好的折中

# appendfsync no //完全依賴 os,性能最好,持久化沒保證

? ? ? ??aof 的方式也同時帶來了另一個問題贞奋。持久化文件會變的越來越大赌厅。例如我們調(diào)用 incr test命令 100 次,文件中必須保存全部的 100 條命令轿塔,其實有 99 條都是多余的特愿。因為要恢復(fù)數(shù)據(jù)庫的狀態(tài)其實文件中保存一條 set test 100 就夠了。為了壓縮 aof 的持久化文件勾缭。 redis 提供了 bgrewriteaof 命令揍障。收到此命令 redis 將使用與快照類似的方式將內(nèi)存中的數(shù)據(jù)以命令的方式保存到臨時文件中,最后替換原來的文件俩由。

二毒嫡、優(yōu)缺點辨析

1.RBD優(yōu)點

(1)RDB會生成多個數(shù)據(jù)文件,每個數(shù)據(jù)文件都代表了某一個時刻中redis的數(shù)據(jù)幻梯,這種多個數(shù)據(jù)文件的方式兜畸,非常適合做冷備,可以將這種完整的數(shù)據(jù)文件發(fā)送到一些遠程的安全存儲上去碘梢,比如說Amazon的S3云服務(wù)上去咬摇,在國內(nèi)可以是阿里云的ODPS分布式存儲上,以預(yù)定好的備份策略來定期備份redis中的數(shù)據(jù)

RDB也可以做冷備煞躬,生成多個文件肛鹏,每個文件都代表了某一個時刻的完整的數(shù)據(jù)快照

AOF也可以做冷備逸邦,只有一個文件,但是你可以龄坪,每隔一定時間昭雌,去copy一份這個文件出來

RDB做冷備,優(yōu)勢在哪兒呢健田?由redis去控制固定時長生成快照文件的事情烛卧,比較方便; AOF,還需要自己寫一些腳本去做這個事情妓局,各種定時RDB數(shù)據(jù)做冷備总放,在最壞的情況下,提供數(shù)據(jù)恢復(fù)的時候好爬,速度比AOF快

(2)RDB對redis對外提供的讀寫服務(wù)局雄,影響非常小,可以讓redis保持高性能存炮,因為redis主進程只需要fork一個子進程炬搭,讓子進程執(zhí)行磁盤IO操作來進行RDB持久化即可

RDB:每次寫,都是直接寫redis內(nèi)存穆桂,只是在一定的時候宫盔,才會將數(shù)據(jù)寫入磁盤中

AOF:每次都是要寫文件的,雖然可以快速寫入os cache中享完,但是還是有一定的時間開銷的,速度肯定比RDB略慢一些

(3)相對于AOF持久化機制來說灼芭,直接基于RDB數(shù)據(jù)文件來重啟和恢復(fù)redis進程,更加快速般又,AOF彼绷,存放的指令日志,做數(shù)據(jù)恢復(fù)的時候茴迁,其實是要回放和執(zhí)行所有的指令日志寄悯,來恢復(fù)出來內(nèi)存中的所有數(shù)據(jù)的RDB,就是一份數(shù)據(jù)文件笋熬,恢復(fù)的時候热某,直接加載到內(nèi)存中即可

2.RBD缺點

(1)恢復(fù)5分鐘內(nèi)的數(shù)據(jù),可能就會丟失五分鐘的數(shù)據(jù)量

(2)RDB每次在fork子進程來執(zhí)行RDB快照數(shù)據(jù)文件生成的時候胳螟,如果數(shù)據(jù)文件特別大昔馋,可能會導(dǎo)致對客戶端提供的服務(wù)暫停數(shù)毫秒,或者甚至數(shù)秒

3.AOF持久化機制的優(yōu)點

(1)AOF可以更好的保護數(shù)據(jù)不丟失糖耸,一般AOF會每隔1秒秘遏,通過一個后臺線程執(zhí)行一次fsync操作,最多丟失1秒鐘的數(shù)據(jù),每隔1秒嘉竟,就執(zhí)行一次fsync操作邦危,保證os cache中的數(shù)據(jù)寫入磁盤中,redis進程掛了洋侨,最多丟掉1秒鐘的數(shù)據(jù)

(2)AOF日志文件以append-only模式寫入,所以沒有任何磁盤尋址的開銷倦蚪,寫入性能非常高希坚,而且文件不容易破損,即使文件尾部破損陵且,也很容易修復(fù)

(3)AOF日志文件即使過大的時候裁僧,出現(xiàn)后臺重寫操作,也不會影響客戶端的讀寫慕购。因為在rewrite log的時候聊疲,會對其中的指導(dǎo)進行壓縮,創(chuàng)建出一份需要恢復(fù)數(shù)據(jù)的最小日志出來沪悲。再創(chuàng)建新日志文件的時候获洲,老的日志文件還是照常寫入。當新的merge后的日志文件ready的時候殿如,再交換新老日志文件即可贡珊。

(4)AOF日志文件的命令通過非常可讀的方式進行記錄涉馁,這個特性非常適合做災(zāi)難性的誤刪除的緊急恢復(fù)飞崖。比如某人不小心用flushall命令清空了所有數(shù)據(jù),只要這個時候后臺rewrite還沒有發(fā)生谨胞,那么就可以立即拷貝AOF文件,將最后一條flushall命令給刪了蒜鸡,然后再將該AOF文件放回去胯努,就可以通過恢復(fù)機制,自動恢復(fù)所有數(shù)據(jù)

4. AOF持久化機制的缺點

(1)對于同一份數(shù)據(jù)來說逢防,AOF日志文件通常比RDB數(shù)據(jù)快照文件更大

(2)AOF開啟后叶沛,支持的寫QPS會比RDB支持的寫QPS低,因為AOF一般會配置成每秒fsync一次日志文件忘朝,當然灰署,每秒一次fsync,性能也還是很高的局嘁。如果你要保證一條數(shù)據(jù)都不丟溉箕,也是可以的,AOF的fsync設(shè)置成沒寫入一條數(shù)據(jù)悦昵,fsync一次肴茄,那就完蛋了,redis的QPS大降

(3)以前AOF發(fā)生過bug但指,就是通過AOF記錄的日志寡痰,進行數(shù)據(jù)恢復(fù)的時候抗楔,沒有恢復(fù)一模一樣的數(shù)據(jù)出來。所以說拦坠,類似AOF這種較為復(fù)雜的基于命令日志/merge/回放的方式连躏,比基于RDB每次持久化一份完整的數(shù)據(jù)快照文件的方式,更加脆弱一些贞滨,容易有bug入热。不過AOF就是為了避免rewrite過程導(dǎo)致的bug,因此每次rewrite并不是基于舊的指令日志進行merge的疲迂,而是基于當時內(nèi)存中的數(shù)據(jù)進行指令的重新構(gòu)建才顿,這樣健壯性會好很多。

(4)唯一的比較大的缺點尤蒿,其實就是做數(shù)據(jù)恢復(fù)的時候郑气,會比較慢,還有做冷備腰池,定期的備份尾组,不太方便,可能要自己手寫復(fù)雜的腳本去做示弓,做冷備不太合適

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末讳侨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子奏属,更是在濱河造成了極大的恐慌跨跨,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囱皿,死亡現(xiàn)場離奇詭異勇婴,居然都是意外死亡,警方通過查閱死者的電腦和手機嘱腥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門耕渴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人齿兔,你說我怎么就攤上這事橱脸。” “怎么了分苇?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵添诉,是天一觀的道長。 經(jīng)常有香客問我组砚,道長吻商,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任糟红,我火速辦了婚禮艾帐,結(jié)果婚禮上乌叶,老公的妹妹穿的比我還像新娘。我一直安慰自己柒爸,他們只是感情好准浴,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捎稚,像睡著了一般乐横。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上今野,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天葡公,我揣著相機與錄音,去河邊找鬼条霜。 笑死催什,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的宰睡。 我是一名探鬼主播蒲凶,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拆内!你這毒婦竟也來了旋圆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤麸恍,失蹤者是張志新(化名)和其女友劉穎灵巧,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抹沪,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡孩等,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了采够。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡冰垄,死狀恐怖蹬癌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情虹茶,我是刑警寧澤逝薪,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站蝴罪,受9級特大地震影響董济,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜要门,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一虏肾、第九天 我趴在偏房一處隱蔽的房頂上張望廓啊。 院中可真熱鬧,春花似錦封豪、人聲如沸谴轮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽第步。三九已至,卻和暖如春缘琅,著一層夾襖步出監(jiān)牢的瞬間粘都,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工刷袍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留翩隧,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓做个,卻偏偏與公主長得像鸽心,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子居暖,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

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

  • 一顽频、Redis高可用概述 在介紹Redis高可用之前,先說明一下在Redis的語境中高可用的含義太闺。 我們知道糯景,在w...
    空語閱讀 1,598評論 0 2
  • 企業(yè)級redis集群架構(gòu)的特點 海量數(shù)據(jù) 高并發(fā) 高可用 要達到高可用,持久化是不可減少的省骂,持久化主要是做災(zāi)難恢復(fù)...
    lucode閱讀 2,208評論 0 7
  • 本文檔翻譯自http://redis.io/topics/persistence蟀淮。 這篇文章提供了 Redis 持...
    daos閱讀 696評論 0 10
  • 轉(zhuǎn)自:https://www.toutiao.com/a6708324379190624782/ 使用 Redis...
    大魚燉海棠閱讀 440評論 0 1
  • 題目:輸入一個整數(shù)和一棵二元樹。從樹的根結(jié)點開始往下訪問一直到葉結(jié)點所經(jīng)過的所有結(jié)點形成一條路徑钞澳。打印出和與輸入整...
    xiaoyanhan閱讀 217評論 0 0