1. 程式人生 > 實用技巧 >redis的兩種持久化的機制,你真的瞭解麼?

redis的兩種持久化的機制,你真的瞭解麼?

redis提供了兩種持久化的機制 RDB和AOF機制

RDB(redis Database):RDB儲存某一個時間點之前的快照資料。

AOF(Append-Only File):指所有的命令列記錄以redis命令請求協議的格式完全持久化儲存儲存為AOF檔案

混合持久化(4.0版本以後):指進行AOF重寫時子程序將當前時間點的資料快照儲存為RDB檔案格式,而後將父程序累計命令儲存為AOF格式。

RDB快照有兩種觸發方式

1:為通過配置引數,如下:

通過一定的時間週日內看,命令執行的個數,超過閾值立即執行快照生成

save 900 1  //900秒內有1次更新
save 300 10 //30秒內有10次更新
save 60 10000  //60秒內有10000次更新

2:手動執行bgsave/save,手動觸發生成快照
直接執行save會阻塞主程序,bgsave的話會fork一個子程序完成快照

但是redis在發生RDB持久化的過程中有幾個問題需要思考

1.RDB快照過程中Redis是否會停止對外服務

2.如果不回停止服務,那如何處理新的請求

接下來我們看redis的

RDB持久化的具體過程


1:主程序會fork一個子程序

2:子程序會共享一部分主程序的資料空間,並且把共享的資料置為read-only的狀態,在這個過程中,子程序以rdb的協議來實行持久化

3:在持久化的過程中是避免不了有新的資料寫入的,因為我們有一部分的資料是共享的,兩個程序同時擁有一塊資料,肯定會導致資料不一致的問題,
但是依賴於作業系統的fork機制,在修改的時候一定是修改部分記憶體頁的資料,這個時候會觸發對應記憶體頁的copyonwrite的操作,不會影響子程序完
成持久化,持久化結束後,主程序會對子程序進行回收

RDB的檔案格式

  • redis的rdb檔案是一個非常緊湊的格式

  • 開頭的REDIS是固定的一個格式,redis在讀取持久化檔案的時候發現不是以REDIS開頭的會報錯

  • 0006是RDB_VERSION當前RDB協議的版本

  • AUX_FIELD_KEY_VALUE_PAIRS是一些輔助的欄位

  • data則為儲存的資料,資料首先會選擇redis_db,db選擇之後就是鍵值對的資料,對應的鍵值對又會分為設定過過期時間和未設定過期時間的資料

RDB持久化的優點

1:二進位制的資料非常緊湊,資料的恢復速度非常快

2:在持久化的過程中,效能最大化,fork子程序來完成寫操作,讓主程序繼續處理命令,使用單獨子程序來進行持久化,保證了redis的高效能

RDB持久化的缺點

1:資料安全性低,RDB是間隔一段時間進行持久化,如果持久化之間redis發生了故障,會發生資料丟失

2:linux fork之後,kernel把父程序中所有的記憶體頁許可權都設定readonly,然後子程序的地址空間指向父程序。當父子程序都只讀記憶體時,相安無事。當其中某個程序寫記憶體時,CPU硬體檢測到記憶體頁是read-only的,於是觸發頁異常終端(page-fault),陷入kernal的一箇中斷例程。中斷例程中,kernel的copyonwrite機制就會把觸發的異常頁複製一份,於是父子程序各自持有獨立的一份。如果這個時候有大量的寫入操作,會產生大量的分頁錯誤(頁異常中斷page-fault
),這樣就得耗費不少效能在複製上。

AOF持久化執行流程

通過appendonly yes開啟

Redis使用單執行緒響應命令,如果每次AOF檔案命令都追加到磁碟,會極大的影響處理效能,所以Redis先寫入aof緩衝區,根據使用者配置的同步磁碟策略寫入aof檔案中,可以通過appendfsync引數配置同步策略:含義如下

appendfsync always #表示每次更新操作後手動呼叫fsync()將資料寫入到磁碟
appendfsync everysec #表示每秒同步一次(折中方案,預設值)
appendfsync no  #表述等作業系統進行資料快取同步到磁碟(快速響應客戶端,不對AOF做資料同步,同步檔案由作業系統負責,通常同步週期最長30S)

AOF重寫機制

隨著命令得不斷寫入AOF,檔案會越來越大,為了解決這個問題Redis引入了AOF重寫機制壓縮檔案體積。AOF檔案重寫是把Redis程序內的資料轉化為寫命令同步到新AOF檔案的過程,AOF重寫機制可以通過手動觸發了自動觸發

手動觸發:bgreweuteaof命令

自動觸發:

auto-aof-rewrite-percentage 100 #表示當前AOF檔案空間和上一次重寫後AOF檔案空間的比值(100%)
auto-aof-rewrite-min-size 64mb #代表AOF重寫時檔案最小體積

AOF的優點:資料安全,AOF持久化可以配置appendfsync屬性,有always,每進行一次命令操作就記錄到aof檔案中一次。

AOF的缺點:資料集比較大的時候,比RDB啟動效率低

混合持久化

可以通過aof-use-rdb-preamble yes開啟

載入時,首先會識別AOF檔案是否以REDIS字串開頭,如果是,就按照RDB格式載入,載入完RDB後繼續按AOF格式載入剩餘部分。
混合式持久化方案兼顧了RDB的速度,和AOF的安全性

關注我的技術公眾號,每週都有優質技術文章推送。
微信掃一掃下方二維碼即可關注: