1僻肖、混合持久化
? ? 重啟redis時老翘,我們很少使用RDB來恢復(fù)內(nèi)存狀態(tài)掀亩,因為會丟失大量數(shù)據(jù)舔哪。我們通常使用AOF日志重放,但是重放AOF日志性能相對RDB來說要慢很多槽棍,這樣在redis實例很大的情況下捉蚤,啟動需要花費很長的時間。redis-4.0為了解決這個問題炼七,帶來了一個新的持久化選項——混合持久化缆巧。將RDB文件的內(nèi)容和增量的AOF日志文件存在一起。這里的AOF日志不再是全量的日志豌拙,而是自持久化開始到持久化結(jié)束的這段時間發(fā)生的增量AOF日志陕悬,通常這部分AOF日志很小。aof-use-rdb-preamble配置參數(shù)控制按傅,yes則表示開啟捉超,no表示禁用。
2唯绍、各種持久化方式對比
2.1拼岳、 RDB的優(yōu)缺點? ? ??
優(yōu)點:
????1、當進行RDB持久化時况芒,對redis服務(wù)處理讀寫請求的影響非常小惜纸,可以讓redis保持高性能,因為redis主進程只需要fork一個子進程绝骚,讓子進程執(zhí)行磁盤IO操作來進行RDB持久化即可耐版。生成一次RDB文件的過程就是把當前時刻內(nèi)存中的數(shù)據(jù)一次性寫入文件中,而AOF則需要先把當前內(nèi)存中的小量數(shù)據(jù)轉(zhuǎn)換為操作指令皮壁,然后把指令寫到內(nèi)存緩存中椭更,然后再刷寫入磁盤。
????2蛾魄、相對于AOF持久化機制來說虑瀑,直接基于RDB數(shù)據(jù)文件來重啟和恢復(fù)redis的數(shù)據(jù)會更加快速。AOF滴须,存放的是指令日志舌狗,做數(shù)據(jù)恢復(fù)的時候,要回放和執(zhí)行所有的指令日志扔水,從而恢復(fù)內(nèi)存中的所有數(shù)據(jù)痛侍。而RDB,就是一份數(shù)據(jù)文件,恢復(fù)的時候主届,直接加載到內(nèi)存中即可赵哲。
缺點:
????1、如果想要在redis故障時君丁,盡可能少的丟失數(shù)據(jù)枫夺,那么RDB沒有AOF好。一般來說绘闷,RDB數(shù)據(jù)快照文件橡庞,都是每隔5分鐘,或者更長時間生成一次印蔗,這個時候就得接受一旦redis進程宕機扒最,那么會丟失最近5分鐘的數(shù)據(jù)。這個問題华嘹,也是RDB最大的缺點吧趣,就是不適合做第一優(yōu)先的恢復(fù)方案,如果你依賴RDB做第一優(yōu)先恢復(fù)方案除呵,會導(dǎo)致數(shù)據(jù)丟失的比較多再菊。
? ? 2、RDB每次在fork子進程來執(zhí)行RDB快照數(shù)據(jù)文件生成的時候颜曾,如果數(shù)據(jù)文件特別大纠拔,可能會導(dǎo)致對客戶端提供的服務(wù)暫停數(shù)毫秒,甚至數(shù)秒泛豪。所以一般不要讓生成RDB文件的間隔太長稠诲,否則每次生成的RDB文件太大了,對redis本身的性能會有影響诡曙。
2.2臀叙、 AOF的優(yōu)缺點
優(yōu)點:
????1、AOF可以更好的保護數(shù)據(jù)不丟失价卤,一般AOF會每隔1秒劝萤,通過一個后臺線程執(zhí)行一次fsync操作,最多丟失1秒鐘的數(shù)據(jù)慎璧。
????2床嫌、AOF日志文件以append-only模式寫入,所以沒有任何磁盤尋址的開銷胸私,寫入性能非常高厌处,而且文件不容易破損,即使文件尾部破損岁疼,也很容易修復(fù)阔涉。
????3、AOF日志文件即使過大的時候,出現(xiàn)后臺重寫操作瑰排,也不會影響客戶端的讀寫贯要。因為在rewrite的時候,會對其中的指令進行壓縮凶伙,會創(chuàng)建出一份需要恢復(fù)數(shù)據(jù)的最小日志出來郭毕。
缺點:
????1、對于同一份數(shù)據(jù)來說函荣,AOF日志文件通常比RDB數(shù)據(jù)快照文件更大。
????2扳肛、AOF的寫性能比RDB的寫性能低傻挂,因為AOF一般會配置成每秒fsync一次日志文件,當然挖息,每秒一次fsync金拒,性能也還是很高的,只不過比起RDB來說性能低套腹,如果要保證一條數(shù)據(jù)都不丟绪抛,也是可以的,AOF的fsync設(shè)置成每寫入一條數(shù)據(jù)电禀,fsync一次幢码,但是這樣,redis的性能會大大下降尖飞。
????3症副、基于AOF文件做恢復(fù)的速度不如基于RDB文件做恢復(fù)的速度。
2.3政基、 混合持久化的優(yōu)缺點
優(yōu)點:結(jié)合了RDB和AOF的優(yōu)點贞铣,使得數(shù)據(jù)恢復(fù)的效率大幅提升
缺點:兼容性不好,redis-4.x新增沮明,雖然最終的文件也是.aof格式的文件辕坝,但在4.0之前版本都不識別該aof文件,同時由于前部分是RDB格式荐健,閱讀性較差酱畅。