-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
redis持久化方案(redis持久化方案有哪些,優(yōu)缺點(diǎn))
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于redis持久化方案的問題,以下是小編對(duì)此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請(qǐng)撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、redis的RDB和AOF兩種持久化機(jī)制優(yōu)缺點(diǎn)分析
redis持久化的意義主要是為了做 災(zāi)難恢復(fù)、數(shù)據(jù)恢復(fù) 其實(shí)可以把它歸類到高可用的一個(gè)環(huán)節(jié)。
RDB持久化機(jī)制,對(duì)redis中的 數(shù)據(jù) 執(zhí)行周期性的持久化。
AOF機(jī)制對(duì) 每條寫入命令 作為日志,以append-only的模式寫入一個(gè)日志文件,在redis重啟對(duì)時(shí)候,可以通過回放AOF日志中寫入的指令來重新構(gòu)建整個(gè)的數(shù)據(jù)集。
如果同時(shí)使用AOF和RDB兩種持久化機(jī)制 ,那么在redis重啟的時(shí)候,會(huì)使用AOF來重新構(gòu)建數(shù)據(jù),因?yàn)锳OF中的數(shù)據(jù)更加的完整。
優(yōu)點(diǎn):
(1)RDB會(huì)生成多個(gè)數(shù)據(jù)文件,每個(gè)數(shù)據(jù)文件都代表了某一個(gè)時(shí)刻中redis的數(shù)據(jù),這種多個(gè)數(shù)據(jù)文件的方式,非常適合做冷備??梢詫⑽募鎯?chǔ)到云端,本地磁盤等等。
(2)RDB機(jī)制對(duì)redis對(duì)外提供讀寫服務(wù)時(shí)候的影響非常小,可以讓redis保持高性能,因?yàn)閞edis主進(jìn)程只需要fork一個(gè)子進(jìn)程,讓子進(jìn)程執(zhí)行磁盤IO操作來進(jìn)行RDB的持久化即可。
(3)相對(duì)于AOF持久化機(jī)制來說,直接基于RDB數(shù)據(jù)文件來重啟和恢復(fù)redis進(jìn)程,更加的快速。
缺點(diǎn):
(1)如果想讓redis出現(xiàn)故障,盡可能的少丟失數(shù)據(jù),那么RDB沒有AOF好。因?yàn)橐话銇碚f,RDB數(shù)據(jù)快照文件,基本上都是每隔5分鐘或者更長的時(shí)間,生成一次,這個(gè)時(shí)候,如果一旦發(fā)生宕機(jī),那么就會(huì)把這段時(shí)間內(nèi)的數(shù)據(jù)都丟失掉。
(2)RDB每次在fork子進(jìn)程來執(zhí)行RDB快照數(shù)據(jù)文件生成的時(shí)候,如果數(shù)據(jù)文件特別大,可能會(huì)導(dǎo)致對(duì)客戶端提供的服務(wù)暫停數(shù)毫秒,或者甚至數(shù)秒。
優(yōu)點(diǎn):
(1)AOF可以更好的保護(hù)數(shù)據(jù)不丟失,一般AOF會(huì)每隔1秒,通過一個(gè)后臺(tái)線程執(zhí)行fsync操作,最多丟失1秒鐘的數(shù)據(jù)。
(2)AOF日志文件以append-only模式寫入,所以沒有任何磁盤尋址的開銷,寫入性能非常高,而且文件不容易受損,即使文件尾部受損,也能很容易恢復(fù),打開文件,把后面損壞的數(shù)據(jù)刪除即可。
(3)AOF日志文件即使過大的時(shí)候,出現(xiàn)后臺(tái)重寫操作,也不會(huì)影響客戶端的讀寫。因?yàn)樵趓ewrite log 的時(shí)候,會(huì)對(duì)其中的指令進(jìn)行壓縮,創(chuàng)建出一份需要恢復(fù)數(shù)據(jù)對(duì)最小日志出來,再創(chuàng)建新日志文件的時(shí)候,老日志文件還是會(huì)照常寫入指令,當(dāng)新的日志文件生成好之后,會(huì)將舊日志文件中后面寫入的指令合并到新的日志文件中,這個(gè)新的merge后的日志文件,會(huì)在ready的時(shí)候,與舊的日志文件進(jìn)行交換。之后就會(huì)把舊的日志文件刪除掉。
(4)AOF文件中保存的是執(zhí)行的指令,所以這個(gè)特性非常適合做災(zāi)難性的誤操作緊急恢復(fù)。比如某人不小心用flushall命令清空了所有數(shù)據(jù),只要這個(gè)時(shí)候后臺(tái)rewrite還沒有發(fā)生,那么久可以立即拷貝這個(gè)AOF文件出來,將最后一條flushall命令刪除,然后再將AOF文件放回去,就可以通過恢復(fù)機(jī)制,自動(dòng)的恢復(fù)所有數(shù)據(jù)了。
缺點(diǎn):
(1)對(duì)于同一份數(shù)據(jù)來說,AOF的日志文件通常要比RDB的數(shù)據(jù)快照文件要大。
(2)AOF開啟之后,Redis服務(wù)支持的寫QPS會(huì)比RDB支持的寫QPS低,因?yàn)锳OF一般會(huì)配置成每秒fsync一次日志文件,當(dāng)然每秒一次fsync的性能也還是很高的。
(3)以前的AOF發(fā)生過bug,就是通過AOF記錄的日志,進(jìn)行數(shù)據(jù)恢復(fù)的時(shí)候,沒有恢復(fù)一模一樣的數(shù)據(jù)出來,所以說,類似AOF這種較為復(fù)雜的基于命令日志/merge/回放的方式,比基于RDB每次持久化一份完整數(shù)據(jù)快照文件的方式,更加脆弱一些,容易有bug。不過AOF為了避免rewrite過程導(dǎo)致的bug,因此每次rewrite并不是基于舊的指令日志進(jìn)行merge,而是基于當(dāng)時(shí)內(nèi)存中的數(shù)據(jù)進(jìn)行指令的重新構(gòu)建,這樣健壯性能更好一些。
綜合使用兩者,用AOF來保證數(shù)據(jù)盡可能的少丟失,作為第一選擇,其次在AOP丟失或者損壞的情況下,用RDB來更加快速的恢復(fù)數(shù)據(jù)。
二、Redis持久化機(jī)制ADB和AOF
有save和bgsave兩種方式
RDB優(yōu)點(diǎn):
RDB缺點(diǎn):
數(shù)據(jù)安全性低。如果持久化的時(shí)候redis 發(fā)生故障, 會(huì)丟失最后一次持久化的數(shù)據(jù), 所以這種方式更 適合數(shù)據(jù)要求不高 的時(shí)候.
fock子進(jìn)程過程中redis也是不能執(zhí)行操作的,所以進(jìn)行R DB操作的時(shí)間間隔一定不能太短 .而且,如果當(dāng)數(shù)據(jù)集較大時(shí),也可能會(huì)導(dǎo)致整個(gè)服務(wù)器停止服務(wù)⼏百毫秒,甚至是秒級(jí)。
以日志的形式記錄服務(wù)器所處理的每⼀個(gè)寫、刪除操作,查詢操作不會(huì)記錄,以文本的方式記錄,不斷追加,可以打開⽂件看到詳細(xì)的操作記錄 .
三種追加方式(fsync):
AOF優(yōu)點(diǎn):
AOF缺點(diǎn) :
三、redis可以持久化嗎
redis 數(shù)據(jù)持久化
1、快照(snapshots)
缺省情況情況下,Redis把數(shù)據(jù)快照存放在磁盤上的二進(jìn)制文件中,文件名為dump.rdb。你可以配置Redis的持久化策略,例如數(shù)據(jù)集中每N秒鐘有超過M次更新,就將數(shù)據(jù)寫入磁盤;或者你可以手工調(diào)用命令SAVE或BGSAVE。

數(shù)據(jù)保存的目錄:

工作原理
Redis forks.
子進(jìn)程開始將數(shù)據(jù)寫到臨時(shí)RDB文件中。
當(dāng)子進(jìn)程完成寫RDB文件,用新文件替換老文件。
這種方式可以使Redis使用copy-on-write技術(shù)。
2、APPEND ONLY MODE(AOF)
快照模式并不十分健壯,當(dāng)系統(tǒng)停止,或者無意中Redis被kill掉,最后寫入Redis的數(shù)據(jù)就會(huì)丟失。這對(duì)某些應(yīng)用也許不是大問題,但對(duì)于要求高可靠性的應(yīng)用來說,Redis就不是一個(gè)合適的選擇。
Append-only文件模式是另一種選擇。
你可以在配置文件中打開AOF模式:

選項(xiàng):
1、appendfsync no
當(dāng)設(shè)置appendfsync為no的時(shí)候,Redis不會(huì)主動(dòng)調(diào)用fsync去將AOF日志內(nèi)容同步到磁盤,所以這一切就完全依賴于操作系統(tǒng)的調(diào)試了。對(duì)大多數(shù)Linux操作系統(tǒng),是每30秒進(jìn)行一次fsync,將緩沖區(qū)中的數(shù)據(jù)寫到磁盤上。
2、appendfsync everysec
當(dāng)設(shè)置appendfsync為everysec的時(shí)候,Redis會(huì)默認(rèn)每隔一秒進(jìn)行一次fsync調(diào)用,將緩沖區(qū)中的數(shù)據(jù)寫到磁盤。但是當(dāng)這一 次的fsync調(diào)用時(shí)長超過1秒時(shí)。Redis會(huì)采取延遲fsync的策略,再等一秒鐘。也就是在兩秒后再進(jìn)行fsync,這一次的fsync就不管會(huì)執(zhí)行多長時(shí)間都會(huì)進(jìn)行。這時(shí)候由于在fsync時(shí)文件描述符會(huì)被阻塞,所以當(dāng)前的寫操作就會(huì)阻塞。
所以,結(jié)論就是:在絕大多數(shù)情況下,Redis會(huì)每隔一秒進(jìn)行一次fsync。在最壞的情況下,兩秒鐘
四、
以上就是關(guān)于redis持久化方案相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
direction怎么記憶(direction怎么記?。?/a>
redis排行榜(redis排行榜實(shí)時(shí)更新)
download下載安裝(downloadhere體驗(yàn)服下載)
組織架構(gòu)圖用什么軟件做(公司組織架構(gòu)圖用什么軟件做)