Java架構直通車——Redis持久化和宕機恢復機制

Redis持久化機制

我們都知道Redis是基於內存的,那麼當Redis節點宕機後,要保證宕機恢復,Redis必須要有一個持久化的機制,持久化的話是Redis高可用中比較重要的一個環節。

Redis持久化有兩種方式:

  • RDB:RDB 持久化機制,是對 Redis 中的數據執行週期性的持久化。
  • AOF:AOF 機制對每條寫入命令作爲日誌,以 append-only 的模式寫入一個日誌文件中,因爲這個模式是只追加的方式,所以沒有任何磁盤尋址的開銷,所以很快,有點像Mysql中的binlog。

RDB

RDB(redis database)
原理:將redis在內存的數據庫中的數據定時dump到硬盤上,實現rdb持久化。

在rdb持久化過程中,是在規定的時間間隔之內將內存中的數據集快照寫入磁盤,實際操作過程是fork一個子進程,先將數據集寫入到臨時文件中,寫入成功後,再替換之前的文件,再用二進制壓縮存儲。那麼此操作是一種間隔存儲的,類似一種快照形式。(典型的:Copy-On-Write,寫時複製機制)。

AOF

AOF(append of file)
原理:將redis的操作日誌以追加的形式寫入到文件中。

通過只增不改,不刪方式。Aof持久化以日誌的形式記錄服務器所處理的每一個寫、刪除操作,查詢操作不會記錄,文本的形式記錄,可以打開文件看到詳細的操作記錄。

可以看出aof是一個粒度比較小的操作。精確到每一條操作。且每條操作的前後都不影響。

Redis宕機恢復機制

RDB更適合做冷備,AOF更適合做熱備。

熱備份針對歸檔模式的數據庫,在數據庫仍舊處於工作狀態時進行備份。而冷備份指在數據庫關閉後,進行備份,適用於所有模式的數據庫。
熱備份的優點在於當備份時,數據庫仍舊可以被使用並且可以將數據庫恢復到任意一個時間點。
冷備份的優點在於它的備份與恢復操作相當簡單,並且由於冷備份的數據庫可以工作在非歸檔模式下。

兩種機制全部開啓的時候,Redis在重啓的時候會默認使用AOF去重新構建數據,因爲AOF的數據是比RDB更完整的。

兩者對比:

  1. RDB是快照文件,都是默認五分鐘甚至更久的時間纔會生成一次,這意味着你這次同步到下次同步這中間五分鐘的數據都很可能全部丟失掉。但是AOF是一秒一次去通過一個後臺的線程fsync操作,那最多丟這一秒的數據。
  2. AOF在對日誌文件進行操作的時候是以append-only的方式去寫的,他只是追加的方式寫數據,自然就少了很多磁盤尋址的開銷了,寫入性能驚人,文件也不容易破損。
  3. 一樣的數據,AOF文件比RDB還要大。相比之下,使用RDB做恢復更快,而使用AOF做恢復更全。

單獨用RDB你會丟失很多數據,單獨用AOF,數據恢復沒RDB來的快,真出什麼問題的時候第一時間用RDB恢復,然後AOF做數據補全。冷備熱備一起上,纔是互聯網時代一個高健壯性系統的王道。

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