溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

redis中怎么實(shí)現(xiàn)持久化

發(fā)布時(shí)間:2021-06-26 14:24:31 來(lái)源:億速云 閱讀:131 作者:Leah 欄目:大數(shù)據(jù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)redis中怎么實(shí)現(xiàn)持久化,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

redis 持久化的兩種方式

  • RDB:RDB 持久化機(jī)制,是對(duì) redis 中的數(shù)據(jù)執(zhí)行周期性的持久化。

  • AOF:AOF 機(jī)制對(duì)每條寫(xiě)入命令作為日志,以 append-only 的模式寫(xiě)入一個(gè)日志文件中,在 redis 重啟的時(shí)候,可以通過(guò)回放 AOF 日志中的寫(xiě)入指令來(lái)重新構(gòu)建整個(gè)數(shù)據(jù)集。

通過(guò) RDB 或 AOF,都可以將 redis 內(nèi)存中的數(shù)據(jù)給持久化到磁盤(pán)上面來(lái),然后可以將這些數(shù)據(jù)備份到別的地方去,比如說(shuō)阿里云等云服務(wù)。

如果 redis 掛了,服務(wù)器上的內(nèi)存和磁盤(pán)上的數(shù)據(jù)都丟了,可以從云服務(wù)上拷貝回來(lái)之前的數(shù)據(jù),放到指定的目錄中,然后重新啟動(dòng) redis,redis 就會(huì)自動(dòng)根據(jù)持久化數(shù)據(jù)文件中的數(shù)據(jù),去恢復(fù)內(nèi)存中的數(shù)據(jù),繼續(xù)對(duì)外提供服務(wù)。

如果同時(shí)使用 RDB 和 AOF 兩種持久化機(jī)制,那么在 redis 重啟的時(shí)候,會(huì)使用 AOF 來(lái)重新構(gòu)建數(shù)據(jù),因?yàn)?AOF 中的數(shù)據(jù)更加完整。

RDB 優(yōu)缺點(diǎn)
  • RDB會(huì)生成多個(gè)數(shù)據(jù)文件,每個(gè)數(shù)據(jù)文件都代表了某一個(gè)時(shí)刻中 redis 的數(shù)據(jù),這種多個(gè)數(shù)據(jù)文件的方式,非常適合做冷備,可以將這種完整的數(shù)據(jù)文件發(fā)送到一些遠(yuǎn)程的安全存儲(chǔ)上去,比如說(shuō) Amazon 的 S3 云服務(wù)上去,在國(guó)內(nèi)可以是阿里云的 ODPS 分布式存儲(chǔ)上,以預(yù)定好的備份策略來(lái)定期備份redis中的數(shù)據(jù)。

  • RDB 對(duì) redis 對(duì)外提供的讀寫(xiě)服務(wù),影響非常小,可以讓 redis 保持高性能,因?yàn)?redis 主進(jìn)程只需要 fork 一個(gè)子進(jìn)程,讓子進(jìn)程執(zhí)行磁盤(pán) IO 操作來(lái)進(jìn)行 RDB 持久化即可。

  • 相對(duì)于 AOF 持久化機(jī)制來(lái)說(shuō),直接基于 RDB 數(shù)據(jù)文件來(lái)重啟和恢復(fù) redis 進(jìn)程,更加快速。

  • 如果想要在 redis 故障時(shí),盡可能少的丟失數(shù)據(jù),那么 RDB 沒(méi)有 AOF 好。一般來(lái)說(shuō),RDB 數(shù)據(jù)快照文件,都是每隔 5 分鐘,或者更長(zhǎng)時(shí)間生成一次,這個(gè)時(shí)候就得接受一旦 redis 進(jìn)程宕機(jī),那么會(huì)丟失最近 5 分鐘的數(shù)據(jù)。

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

AOF 優(yōu)缺點(diǎn)
  • AOF 可以更好的保護(hù)數(shù)據(jù)不丟失,一般 AOF 會(huì)每隔 1 秒,通過(guò)一個(gè)后臺(tái)線(xiàn)程執(zhí)行一次fsync操作,最多丟失 1 秒鐘的數(shù)據(jù)。

  • AOF 日志文件以 append-only 模式寫(xiě)入,所以沒(méi)有任何磁盤(pán)尋址的開(kāi)銷(xiāo),寫(xiě)入性能非常高,而且文件不容易破損,即使文件尾部破損,也很容易修復(fù)。

  • AOF 日志文件即使過(guò)大的時(shí)候,出現(xiàn)后臺(tái)重寫(xiě)操作,也不會(huì)影響客戶(hù)端的讀寫(xiě)。因?yàn)樵?nbsp;rewrite log 的時(shí)候,會(huì)對(duì)其中的指導(dǎo)進(jìn)行壓縮,創(chuàng)建出一份需要恢復(fù)數(shù)據(jù)的最小日志出來(lái)。再創(chuàng)建新日志文件的時(shí)候,老的日志文件還是照常寫(xiě)入。當(dāng)新的 merge 后的日志文件 ready 的時(shí)候,再交換新老日志文件即可。

  • AOF 日志文件的命令通過(guò)非??勺x的方式進(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ù)。

  • 對(duì)于同一份數(shù)據(jù)來(lái)說(shuō),AOF 日志文件通常比 RDB 數(shù)據(jù)快照文件更大。

  • AOF 開(kāi)啟后,支持的寫(xiě) QPS 會(huì)比 RDB 支持的寫(xiě) QPS 低,因?yàn)?AOF 一般會(huì)配置成每秒 fsync 一次日志文件,當(dāng)然,每秒一次 fsync,性能也還是很高的。(如果實(shí)時(shí)寫(xiě)入,那么 QPS 會(huì)大降,redis 性能會(huì)大大降低)

  • 以前 AOF 發(fā)生過(guò) bug,就是通過(guò) AOF 記錄的日志,進(jìn)行數(shù)據(jù)恢復(fù)的時(shí)候,沒(méi)有恢復(fù)一模一樣的數(shù)據(jù)出來(lái)。所以說(shuō),類(lèi)似 AOF 這種較為復(fù)雜的基于命令日志/merge/回放的方式,比基于 RDB 每次持久化一份完整的數(shù)據(jù)快照文件的方式,更加脆弱一些,容易有 bug。不過(guò) AOF 就是為了避免 rewrite 過(guò)程導(dǎo)致的 bug,因此每次 rewrite 并不是基于舊的指令日志進(jìn)行 merge 的,而是基于當(dāng)時(shí)內(nèi)存中的數(shù)據(jù)進(jìn)行指令的重新構(gòu)建,這樣健壯性會(huì)好很多。

RDB和AOF到底該如何選擇

  • 不要僅僅使用 RDB,因?yàn)槟菢訒?huì)導(dǎo)致你丟失很多數(shù)據(jù)

  • 也不要僅僅使用 AOF,因?yàn)槟菢佑袃蓚€(gè)問(wèn)題,第一,你通過(guò) AOF 做冷備,沒(méi)有 RDB 做冷備,來(lái)的恢復(fù)速度更快; 第二,RDB 每次簡(jiǎn)單粗暴生成數(shù)據(jù)快照,更加健壯,可以避免 AOF 這種復(fù)雜的備份和恢復(fù)機(jī)制的 bug。

  • redis 支持同時(shí)開(kāi)啟開(kāi)啟兩種持久化方式,我們可以綜合使用 AOF 和 RDB 兩種持久化機(jī)制,用 AOF 來(lái)保證數(shù)據(jù)不丟失,作為數(shù)據(jù)恢復(fù)的第一選擇; 用 RDB 來(lái)做不同程度的冷備,在 AOF 文件都丟失或損壞不可用的時(shí)候,還可以使用 RDB 來(lái)進(jìn)行快速的數(shù)據(jù)恢復(fù)。

上述就是小編為大家分享的redis中怎么實(shí)現(xiàn)持久化了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI