redis點滴(四) redis持久化

RDB工作原理:

 每隔N分鐘或N次寫的操作後,Redis將數據庫快照保存在名字爲dump.rdb的二進制文件中。壓縮,然後放到備份目錄中。

 比如說,一下設置會讓Redis在滿足“60秒內有至少1000個鍵被改動”這一條件時,自己保存數據集:

save 60 1000

這種方法持久化方式被稱爲快照。

RDB相關參數:

save 900 1  #刷新快照到磁盤中,必須滿足2個要求才會觸發,即900秒之後只是有1個關鍵字發生變化

stop-wrties-on-bgsave-error yes #後臺存儲錯誤停止寫

rebcompression yes #使用LZF壓縮rdb文件

rebchecksum yes #存儲和加載rdb文件時校驗

dbfilename dump.rdb #設置rdb文件名

dir ./   #設置工作目錄,rdb文件會寫入該目錄。

RDB的優點:

1.RDB是一個非常緊湊的文件,它保存了Redis在某個時間段的數據集。這種文件非常適合備份,比如說,你可以在最近24小時內,每小時備份一次RDB文件,並且在每個月的每一天,也備份一次RDB文件。這樣的話,即使遇到了問題,也可以還原到不同的版本。

2.RDB在恢復大數據集時比aof恢復速度快

3.RDB可以最大化Redis性能:父進程在保存RDB文件時唯一要做的就是fork出一個子進行,然後這個子進程就會處理接下來所有保存工作,父進程無須操作I/O操作

4.RDB保存的是一個鏡像文件,可以將它直接傳送到別人數據模塊中

RDB的缺點:

如果在2個保存點之後保存數據,可能會丟失1-N分鐘的數據;如果你需要儘量在服務器故障時丟失數據,那麼RDB不適合你。雖然RDB允許你設置不同的保存點來控制保存RDB文件的頻率。但是,因爲RDB文件需要保存的是整個數據集的狀態,所以它並不是一個輕鬆的操作。因爲你可能需要5分鐘才保存一次RDB文件。在這種情況下,可能會丟失好幾分鐘的數據。


AOF工作原理:

也就是使用日誌文件來記錄所有的寫操作命令,並在服務器啓動時,重新啓動這次命令來還原數據集。

AOF相關參數:

appendonly no  #是否打開aof日誌功能

appendfsync always #每一個命令都立即寫入到aof,安全,速度慢

appendfsync everysec  #每秒寫1次

appendfsync no  #寫入功能讓操作系統判斷緩存區大小統一寫入到aof,同步速率慢,速度快

no-appendfasy-on-rewrite yes  #正在導入rdb快照過程中,需不要停止同步aof

auto-aof-rewrite-percentage 100 #aof文件大小比起上次重寫時的大小,增長率100%時,重寫

auto-aof-rewrite-min-size 60mb #aof文件超過60M時才進行重寫

注:在dump.rdb過程中 ,aof如果停止同步,會不會丟失?

答:不會,所有的操作緩存在內存的隊列裏,dump完成後,統一操作

注:aof重寫是指什麼?

答:aof重寫是指把內存中命令,逆話命令,寫入到aof日誌裏。

問:如果rdb文件與aof文件同時存在,優先用誰來恢復數據?

答:aof

問:恢復時rdb與aof哪個恢復的快?

答:rdb,因爲其是數據的內存映射,直接載入到內存。而aof是命令,需要逐條執行

AOF的重寫的執行步驟:

1.Redis執行fork(),現在同時擁有父進程和子進程

2.子進程開始將新AOF文件的內容寫入到臨時文件

3.對於所有新執行的寫入命令,父進程一邊將它們累計到一個內存緩存中,一邊將這些改動追加到現有AOF文件的末尾;這樣即使在重寫的過程中發生停機,現有的aof文件也是安全的

AOF的優點

1.aof默認的策略是每秒鐘執行一次,在這種配置下,Redis仍然可以保持良好的性能,並且就算髮生了故障,也是丟失一秒鐘的數據

2.Redis可以在AOF文件過大的情況自動進行重寫:重寫後的新aof文件包含了恢復當前數據集所需的最小命令集合,因爲Redis在創建新的aof文件時,會繼續將命令追加到現有的aof文件裏面,即使重寫過程發生了停機,而aof文件而不會丟失。而一旦新aof文件創建完畢,Redis就會從舊的aof文件中切換到新的aof文件,並開始對新的aof文件進行追加操作。

AOF的缺點

1對於相同數據集的文件,aof文件的體積通常比rdb文件大

2.根據fasy策略,aof的速度比rdb慢

3.aof在國慶曾經發生了這樣的問題,因爲個別命令的原因,導入aof文件重新載入時,無法將數據集恢復到保存時的原樣。

4.當子線程完成重寫工作時,它給父進程發送一個信號,父進程在接收信號之後,將內存中所有數據追加到新aof文件的末尾。

備份Redis數據

磁盤故障,節點失效,衆多的問題都可能讓你的數據消失不見,不進行備份是非常危險的

Redis對於數據備份是非常友好的。比如它可以在服務器運行的時候對數據進行備份的:RDB文件一旦創建之後,就不會進行任何修改。當服務器創建了一個新的RDB文件時,它先將文件的內容保存在一個臨時的文件裏,當臨時文件寫完之後,纔會用臨時文件去替換原來的RDB文件


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