redis 五 Redis持久化之aof

2021-10-07 02:06:32 字數 2104 閱讀 7803

前言

1、官網介紹

以下內容為有道詞典翻譯

aof的優勢

使用aof redis更加持久:您可以使用不同的fsync策略:完全沒有fsync,每秒fsync,每個查詢fsync。使用預設策略fsync時,每秒的寫入效能仍然很好(fsync是使用後台執行緒執行的,並且在沒有進行fsync的情況下,主線程將嘗試執行寫入操作。),但是您只能損失一秒鐘的寫入時間。

aof日誌是僅追加的日誌,因此,如果斷電,則不會出現尋道或損壞問題。即使由於某種原因(磁碟已滿或其他原因)以半寫命令結束日誌,redis-check-aof工具也可以輕鬆修復它。

redis太大時,redis可以在後台自動重寫aof。重寫是完全安全的,因為redis繼續追加到舊檔案時,會生成乙個全新的檔案,其中包含建立當前資料集所需的最少操作集,一旦準備好第二個檔案,redis會切換這兩個檔案並開始追加到新的那乙個。

aof以易於理解和解析的格式包含所有操作的日誌。您甚至可以輕鬆匯出aof檔案。例如,即使您使用flushall命令重新整理了所有錯誤檔案,如果在此期間未執行任何日誌重寫操作,您仍然可以儲存資料集,只是停止伺服器,刪除最新命令並重新啟動redis。

aof的缺點

2、簡單理解

官網給出了一大堆的解釋,其實還是很好容易理解的,下面是矽谷陽哥的導圖筆記內容:

以日誌的形式來記錄每個操作,將redis執行過的所有指令記錄下來(讀操作不記錄),只許追加檔案但不可以改寫檔案,redis啟動之初會讀取該檔案重新構建資料,換言之,redis重啟的話就根據日誌檔案的內容將寫指令從前到後執行一次以完成資料的恢復工作

3、aof啟動/修復/恢復

4、aof重寫(rewrite)

概念:aof採用檔案追加方式,檔案會越來越大為避免出現此種情況,新增了重寫機制,

當aof檔案的大小超過所設定的閾值時,redis就會啟動aof檔案的內容壓縮,

只保留可以恢復資料的最小指令集.可以使用命令bgrewriteaof觸發重寫機制

重寫原理:

aof檔案持續增長而過大時,會fork出一條新程序來將檔案重寫(也是先寫臨時檔案最後再rename),

遍歷新程序的記憶體中資料,每條記錄有一條的set語句。重寫aof檔案的操作,並沒有讀取舊的aof檔案,而是將整個記憶體中的資料庫內容用命令的方式重寫了乙個新的aof檔案,這點和快照有點類似

觸發機制

redis會記錄上次重寫時的aof大小,預設配置是當aof檔案大小是上次rewrite後大小的一倍(對應下圖的100)且檔案大於64m時觸發,但是在生產環境中肯定比64m要大的多,比如你到一家公司後,可以看看這家公司的redis的配置檔案,這塊的值,就知道這家公司用redis怎麼樣了

5、同時開啟aof和rdb兩個持久化,redis是怎麼執行的

在這種情況下,當redis重啟的時候會優先載入aof檔案來恢復原始的資料,

因為在通常情況下aof檔案儲存的資料集要比rdb檔案儲存的資料集要完整.

那麼此時能不能只使用aof呢,不能,因為aof在不斷的變化,不好備份,而且可能由於一些網路原因aof出錯,此時rdb的存在還是很有必要的

5、aof優缺點小結

優點:備份機制鍵穩,丟失資料概率低

有可讀的日誌檔案

缺點6、小結

(1)如果我們只用redis做快取,那麼根本不需要持久化

(2)rdb持久化方式能夠在指定的時間間隔能對你的資料進行快照儲存

(3)aof持久化方式記錄每次對伺服器寫的操作,當伺服器重啟的時候會重新執行這些

命令來恢復原始的資料,aof命令以redis協議追加儲存每次寫的操作到檔案末尾.

redis還能對aof檔案進行後台重寫,使得aof檔案的體積不至於過大

(4)兩種持久化方式同時存在,先載入aof檔案恢復資料

Redis之(五)持久化

redis提供了兩種持久化的方式 1 rdb redis database 模式,就是在不同的時間點,將redis儲存的資料生成快照並儲存到磁碟等介質上 2 aof appendonlyfile 模式,則換了乙個角度來實現持久化,那就是將redis執行過的所有寫指令記錄下來,在下次redis重新啟動...

Redis學習 五 Redis持久化

redis是乙個記憶體資料庫,那麼如果不做持久化的話,當redis伺服器守護程序退出,伺服器宕機,計算機斷電 就會導致記憶體中的資料丟失,如果redis只是作為乙個快取伺服器來用的話,那麼不會有什麼影響,但是如果作為乙個記憶體資料庫的話,當上面的情況發生就會出現丟失所有資料的重大事故 rdb red...

Redis系列五 Redis持久化

一 rdb redis database 1 介紹 在指定的時間間隔內將記憶體中的資料集快照寫入磁碟,也就是行話講的snapshot快照,它恢復時是將快照檔案直接讀到記憶體裡。redis會單獨建立 fork 乙個子程序來進行持久化,會先將資料寫入到乙個臨時檔案中,待持久化過程都結束了,再用這個臨時檔...