Redis的RDB持久化和AOF持久化__redis源碼閱讀筆記

來源:互聯網
上載者:User
RDB持久化和AOF持久化 一、 RDB持久化

Redis是記憶體型資料庫,資料庫狀態儲存在記憶體中,伺服器處理序退出資料庫狀態會消失。Redis提供了RDB持久化功能將資料庫狀態,也就是資料庫的索引值對儲存到磁碟中。RDB持久化可以通過SAVE和BGSAVE 命令手動執行,也可以通過設定檔定期執行。
RDB持久化功能產生的RDB檔案是一個經 過壓縮的二進位檔案,Redis伺服器通過載入RDB檔案進行資料庫狀態的還原。 RDB檔案的建立與載入:SAVE和BGSAVE命令產生RDB檔案,
a) SAVE命令會阻塞Redis伺服器處理序直到RDB檔案建立完畢,在阻塞期間伺服器不能處理用戶端命令請求。
b) BGSAVE命令會fork一個子進程,子進程在後台產生RDB檔案,主進程進行處理用戶端命令請求。但是拒絕執行SAVE,BGSAVE和BGREWRITEAOF命令。
c) 檔案載入:Redis伺服器啟動時檢測到RDB檔案存在,自動載入RDB檔案。但是由於AOF檔案的更新頻率比RDB檔案高,所以若開啟了AOF持久化功能則使用AOF檔案還原資料庫狀態,若未開啟則使用RDB檔案。伺服器在載入RDB檔案時一直會處於阻塞狀態,直到載入工作完成。 自動間隔性儲存:通過在設定檔裡設定save選項,讓伺服器每隔一段時間自 動執行一次BGSAVE命令, 如:save 900 1 指在900秒內對資料庫至少修改一次就會執行BGSAVE命令。
a) 如何?自動間隔性儲存:(savaparams+dirty+lastsave+serverCron)1.伺服器開啟時載入設定檔資訊,將多個save選項存入redisServer結構的saveparams數組中,該數組是記錄儲存條件的數組。2,伺服器狀態redisServer維護著計數器記錄從上次持久化RDB檔案完成開始資料庫狀態被修改多少次,還維護了lastsave屬性,記錄上次成功持久化RDB檔案的時間。3.通過serverCron函數檢查倆個條件是否滿足,只要修改次數大於設定的數並且距離上次儲存時間大於設定的時間 都執行BGSAVE命令,持久化資料庫狀態。 二、 AOF持久化

RDB持久化通過儲存資料庫中索引值對來記錄資料庫狀態,AOF持久化通過儲存redis伺服器執行的寫命令儲存資料庫狀態。所有寫命令以命令請求協議格式儲存,即純文字格式。Redis伺服器啟動時可以通過載入執行AOF檔案還原資料庫狀態。

一、 AOF持久化實現:分為命令追加,檔案寫入和檔案同步。

a) 命令追加:AOF持久化功能開啟後,伺服器執行一條寫命令就會將寫命令存放到redisServer結構裡的aof_buf緩衝區末尾,該屬性是sds。
b) 命令寫入:redis伺服器是事件驅動程式,一個事件迴圈中第一步是檔案事件處理命令請求和命令回複,接著是時間事件,一般調用serverCron函數維護服務端狀態,在事件迴圈結束前調用flushappendonlyfile,將aof_buf緩衝區中的寫命令寫入和同步到AOF檔案中。
c) 檔案同步:作業系統裡面,記憶體讀寫速度遠高於磁碟讀寫速度,調用write函數往磁碟檔案寫資料時會將寫入的檔案暫時儲存在一個記憶體緩衝區中,等緩衝區滿了或是時間到了再一併刷入到磁碟檔案中。前面將命令寫入到AOF檔案的函數flushappendonlyfile,由於在設定檔中的配置會有不同的行為。如果配置always表示寫入AOF檔案時立即同步檔案。Everysecond表示每隔一秒檔案同步一次。No表示寫入AOF檔案時不同步,什麼時候同步讓作業系統決定。
AOF檔案載入與資料還原:伺服器建立一個偽用戶端(redis命令只能在用戶端內容中實現),從AOF檔案中分析讀取一條寫命令,使用偽用戶端執行寫命令,然後迴圈讀取寫命令直到檔案執行完畢。
二、 AOF重寫(子進程後台重寫+AOF重寫緩衝區):
寫命令不斷增加,AOF檔案體積膨脹,導致伺服器硬碟空間壓力增大,且資料還原時間增大。通過遍曆資料庫的鍵空間,忽略到期鍵,用一條寫命令記錄這些鍵的儲存狀態來代替多條命令,這是AOF重寫的實現原理。
1. AOF後台重寫(子進程):調用aof_rewrite函數可以產生一個新的AOF檔案,但是aof_rewrite函數會有大量的寫入操作,redis單執行緒模式,調用該函數的線程被長時間阻塞無法處理用戶端的命令請求。所以redis將AOF重寫放入子進程執行。Redis伺服器fork一個子進程,子進程執行AOF重寫,主進程繼續處理用戶端命令請求。
2. 建立子進程後,伺服器會使用一個aof重寫緩衝區,用戶端來的寫命令不僅被加入到AOF緩衝區中,也會被加入重寫緩衝區中。子進程完成AOF重寫後,主進程會將AOF重寫緩衝區中的寫命令寫入新的AOF檔案。用新檔案代替舊檔案實現了AOF後台重寫。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.