Redis學習(六)—— Redis持久化機制

Redis自身提供了兩種持久化方式,分別是RDB快照方式和AOF(Append-only file)方式。redis

RDB方式: RDB持久性以指定的時間間隔執行數據集的時間點快照安全

RDB的優勢:服務器

  1. RDB很是適合備份,能夠在發生災難的時候輕鬆恢復不一樣版本的數據。
  2. RDB適合備份,能夠複製文件
  3. 提升了性能,主進程不須要I/O操做
  4. 和AOP比啓動更快

RDB的缺點:性能

  1. 若是數據的完整性要求較高,RDB就不適合
  2. RDB在執行備份的時候會fork一個線程,若是數據集很大會很費時,可能會致使redis服務在幾毫秒內中止服務。

RDB運行的流程線程

  1. 當須要執行快照的時候,redis會fork一個子線程
  2. 子線程會將數據寫到臨時的RDB文件中去
  3. 當臨時的RDB文件寫完以後會替換原來的RDB文件

AOF方式: AOF方式會記錄服務器接收到的每一個寫入操做,這些操做將在服務器啓動時再次播放,重建原始數據集。使用與Redis協議自己相同的格式以附加方式記錄命令日誌

AOF的優點:進程

  1. 數據安全性更高,能夠設置每一個操做都進行追加日誌,也能夠1秒鐘進行一次,數據丟失的少
  2. 因爲AOF只追加日誌,若是宕機或者停電數據不會發生損壞。甚至一個命令寫到一半掛掉了,也可使用redis-check-aof命令進行修復。
  3. 當日志變得太大的時候,能夠在後臺進行自動重寫。重寫是徹底安全的,由於在Redis繼續附加到舊文件時,會建立一個全新的文件,並建立當前數據集所需的最少操做集,一旦準備好第二個文件,Redis將切換兩個文件並開始追加到新的那一個。
  4. AOP就是將一個接一個的操做記錄到日誌中去。即便使用flushall命令刪除了全部數據,只要沒有進行重寫操做,只須要中止服務,刪除flushall命令。從新啓動redis就能夠恢復數據。

AOF的缺點:內存

  1. 文件體積比相同數據的RDB文件要大
  2. AOF方式持久化會比RDB更耗費服務器資源

AOF執行的流程資源

  1. Redis進行fork操做,如今就有了一個子線程一個父線程
  2. 子線程開始在臨時文件中寫入操做
  3. 父線程繼續提供服務,會將數據更改放入內存緩衝區,同時會繼續寫到舊的文件中去
  4. 若是子線程寫入完成,父線程會將緩衝區的數據寫入新文件
  5. 從新命名舊文件,並將新數據附加到新文件中
相關文章
相關標籤/搜索