天天看點

Redis專題-Redis持久化&持久化方式&持久化意義課程大綱

課程大綱

1、Redis持久化的意義

2、如何應對故障的發生

3、持久化方式-RDB

4、持久化方式-AOF

5、RDB持久化機制的優點與缺點

6、AOF持久化機制的優點與缺點

7、RDB和AOF到底該如何選擇

redis持久化的意義,在于故障恢複
           

常見的故障如下圖所示:

Redis專題-Redis持久化&持久化方式&持久化意義課程大綱

image.png

1.比如你部署了一個redis,作為cache緩存,當然也可以儲存一些較為重要的資料
2.如果沒有持久化的話,redis遇到災難性故障的時候,就會丢失所有的資料
3.如果通過持久化将資料搞一份兒在磁盤上去,然後定期比如說同步和備份到一些雲存儲服務上去,那麼就可以保證資料不丢失全部,還是可以恢複一部分資料回來的
           

RDB 持久化方式如下圖所示:

Redis專題-Redis持久化&持久化方式&持久化意義課程大綱
RDB持久化機制,對redis中的資料執行周期性的持久化.
           

AOF 持久化方式如下圖所示:

Redis專題-Redis持久化&持久化方式&持久化意義課程大綱
AOF機制對每條寫入指令作為日志,以append-only的模式寫入一個日志檔案中,在redis重新開機的時候,可以通過回放AOF日志中的寫入指令來重新建構整個資料集
           

4.1、AOF rewrite 原理如下圖所示:

Redis專題-Redis持久化&持久化方式&持久化意義課程大綱

4.2、持久化RDB-AOF注意事項

1.如果同時使用RDB和AOF兩種持久化機制,那麼在redis重新開機的時候,會使用AOF來重新建構資料,因為AOF中的資料更加完整.

2.通過RDB或AOF,都可以将redis記憶體中的資料給持久化到磁盤上面來,然後可以将這些資料備份到别的地方去,比如說阿裡雲,雲服務

3.如果redis挂了,伺服器上的記憶體和磁盤上的資料都丢了,可以從雲服務上拷貝回來之前的資料,放到指定的目錄中,然後重新啟動redis,redis就會自動根據持久化資料檔案中的資料,去恢複記憶體中的資料,繼續對外提供服務.

4.如果我們想要redis僅僅作為純記憶體的緩存來用,那麼可以禁止RDB和AOF所有的持久化機制
           

RDB持久化機制的優點:
1.RDB會生定期生成新的dump資料檔案,目前時間下的資料檔案都代表了某一個時刻中redis最新的資料,定時複制目前時間最新的dump檔案,生成多個備份檔案的方式,非常适合做冷備,可以将這種完整的資料檔案發送到一些遠端的安全存儲上去,比如說Amazon的S3雲服務上去,在國内可以是阿裡雲的ODPS分布式存儲上,以預定好的備份政策來定期備份redis中的資料。
2.RDB對redis對外提供的讀寫服務,影響非常小,可以讓redis保持高性能,因為redis主程序隻需要fork一個子程序,讓子程序執行磁盤IO操作來進行RDB持久化即可。這個特性很重要。
3、相對于AOF持久化機制來說,直接基于RDB資料檔案來重新開機和恢複redis程序,更加快速。

RDB持久化機制的缺點:
1.如果想要在redis故障時,盡可能少的丢失資料,那麼RDB沒有AOF好。一般來說,RDB資料快照檔案,都是每隔5分鐘,或者更長時間生成一次,這個時候就得接受一旦redis程序當機,那麼會丢失最近5分鐘的資料。
2.RDB每次在fork子程序來執行RDB快照資料檔案生成的時候,如果資料檔案特别大,可能會導緻對用戶端提供的服務暫停數毫秒,或者甚至數秒。
           

AOF持久化機制的優點:
1、AOF可以更好的保護資料不丢失,一般AOF會每隔1秒,通過一個背景線程執行一次fsync操作,最多丢失1秒鐘的資料

2、AOF日志檔案以append-only模式寫入,是以沒有任何磁盤尋址的開銷,寫入性能非常高,而且檔案不容易破損,即使檔案尾部破損,也很容易修複

3、AOF日志檔案即使過大的時候,出現背景重寫操作,也不會影響用戶端的讀寫。因為在rewrite log的時候,會對其中的指導進行壓縮,建立出一份需要恢複資料的最小日志出來。再建立新日志檔案的時候,老的日志檔案還是照常寫入。當新的merge後的日志檔案ready的時候,再交換新老日志檔案即可。

4、AOF日志檔案的指令通過非常可讀的方式進行記錄,這個特性非常适合做災難性的誤删除的緊急恢複。比如某人不小心用flushall指令清空了所有資料,隻要這個時候背景rewrite還沒有發生,那麼就可以立即拷貝AOF檔案,将最後一條flushall指令給删了,然後再将該AOF檔案放回去,就可以通過恢複機制,自動恢複所有資料

AOF持久化機制的缺點:
1、對于同一份資料來說,AOF日志檔案通常比RDB資料快照檔案更大

2、AOF開啟後,支援的寫QPS會比RDB支援的寫QPS低,因為AOF一般會配置成每秒fsync一次日志檔案,當然,每秒一次fsync,性能也還是很高的

3、以前AOF發生過bug,就是通過AOF記錄的日志,進行資料恢複的時候,沒有恢複一模一樣的資料出來。是以說,類似AOF這種較為複雜的基于指令日志/merge/回放的方式,比基于RDB每次持久化一份完整的資料快照檔案的方式,更加脆弱一些,容易有bug。不過AOF就是為了避免rewrite過程導緻的bug,是以每次rewrite并不是基于舊的指令日志進行merge的,而是基于當時記憶體中的資料進行指令的重新建構,這樣健壯性會好很多。

           

1、不要僅僅使用RDB,因為那樣會導緻你丢失很多資料

2、也不要僅僅使用AOF,因為那樣有兩個問題,第一,你通過AOF做冷備,沒有RDB做冷備,來的恢複速度更快; 第二,RDB每次簡單粗暴生成資料快照,更加健壯,可以避免AOF這種複雜的備份和恢複機制的bug

3、綜合使用AOF和RDB兩種持久化機制,用AOF來保證資料不丢失,作為資料恢複的第一選擇; 建議使用RDB來做不同程度的冷備,在AOF檔案都丢失或損壞不可用的時候,還可以使用RDB來進行快速的資料恢複。
           
個人部落格: http://www.markfork.com 個人簡書: https://www.jianshu.com/u/c169fce5179b 慕課網: https://www.imooc.com/u/2150709/articles

繼續閱讀