Redis系列03 -持久化介紹(RDB & AOF)

前言

Redis體系學習整理,點我點我
解決問題:redis數據在內存中,機器宕機了斷電了,數據丟失怎麼辦?

Redis作爲Nosql中一員,因其完全基於內存,支持多樣的數據結構,單線程,使用多路複用I/O等特點,逐漸成爲了各企業技術選型中緩存模塊的首選。
因爲數據在內存中,帶來了高性能的同時,也帶來數據易丟失的特點。萬一機器故障宕機,內存中的數據將會丟失,造成難以預估狀態和損失。
所以數據的備份與持久化,就非常有必要了。
所以今天我們來談談,Redis最基本的持久化方案。

持久化數據的常用方案

各系統雖然不同,但是持久化思路是類似的。
最常用的有兩種方式:**複製和日誌。**下面分別介紹一下。

複製(snapshot快照)

將存儲介質中的數據,平移到另一塊存儲介質中。如果存儲的區域比較幾種,是非常非常高效的。 包括大家數據HashMap的Rehash,也會數據搬遷平移的過程。

日誌(操作日誌)

把每條操作,一五一十的記錄下來。一個大家比較熟悉的場景,就是DB中的redolog。 他就是記錄了SQL運行的記錄。在恢復時進行批量操作。

RDB

迴歸到Redis的持久化方式
RDB:redis中的”複製“的模式稱爲RDB, 記錄下內存中二進制數據的快照。

啓動方式

人工啓動

  • 指令:sava
    * 觸發持久化,存儲到配置的路徑dump.rdb文件中。
    * 會阻塞redis線程,線上用肯定崩。
  • 指令:bgsave
    * 通過操作系統fork一個進程,來異步進行save的操作

配置啓動

如save 60 10000(60秒或者10000次操作)
具體的配置如下:
在這裏插入圖片描述

特殊啓動

* 主從複製時
* 關機shutown時
* 重啓reload時

優缺點

優點

  • 緊湊壓縮的二進制的內存數據,存取高效
  • 存儲單時間節點上的快照,非常適合全量複製的場景
  • 數據恢復明顯快於AOF

缺點

  1. 無法實時持久化,
  2. 消耗資源
  3. 存在一定的RDB文件的兼容問題。

AOF

AOF:redis中的”日誌“的模式被稱爲AOF(append only file),將每條修改內存的指令將會記錄下來。
配置方式在redis.conf文件中有詳細說明,有興趣深入瞭解的可以進文件讀一讀。
在這裏插入圖片描述

開啓方式

appendonly yes
appendsync aways
對應的三種策略:

  • always(每次都存):數據0誤差,性能低下,會成爲瓶頸
  • everysec(每秒1次):
  • no (系統配置)

AOF的重寫機制

簡介:

當指令數量特別多的時候,AOF文件會變的巨大。但是並不是所有AOF指令都是有效的,比如如下三條AOF記錄
1:set name1 zhang3
2:set name1 zhang4
3:set name1 zhang5 其實只有這條是內存中的最終狀態。
重寫後就是把1和2幹掉。這樣指令就少了非常多。

啓動命令:

bgrewriteaof,講操作指令存儲到 ”複製擠壓緩衝區“中。

後記

在工作中因爲使用集羣,而集羣的同步,讀寫分離等特點,讓他天生具備了數據備份的特點。所以我們公司的RDB都是默認關閉的。
但是這些知識在集羣的主從複製中,會有非常多的使用。或者說主從複製就是依賴RDB和AOF來完成的。學習這個部分後,我們才能更好的理解集羣和主從複製。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章