成為部落格專家 Redis AOF持久化設定

2021-09-23 10:37:35 字數 2067 閱讀 5562

aof持久化,預設是關閉的,預設是開啟rdb持久化

開啟aof持久化機制之後,redis每次接收到一條寫命令,就會寫入日誌檔案中,當然是先寫入os cache的,然後每隔一定時間再fsync一下

而且即使aof和rdb都開啟了,redis重啟的時候,也是優先通過aof進行資料恢復的,因為aof資料比較完整

可以配置aof的fsync策略,有三種策略可以選擇,一種是每次寫入一條資料就執行一次fsync; 一種是每隔一秒執行一次fsync; 一種是不主動執行fsync

always: 每次寫入一條資料,立即將這個資料對應的寫日誌fsync到磁碟上去,效能非常非常差,吞吐量很低; 確保說redis裡的資料一條都不丟,那就只能這樣了

mysql -> 記憶體策略,大量磁碟,qps到多少,一兩k。qps,每秒鐘的請求數量

redis -> 記憶體,磁碟持久化,qps到多少,單機,一般來說,上萬qps沒問題

everysec: 每秒將os cache中的資料fsync到磁碟,這個最常用的,生產環境一般都這麼配置,效能很高,qps還是可以上萬的

no: 僅僅redis負責將資料寫入os cache就撒手不管了,然後後面os自己會時不時有自己的策略將資料刷入磁碟,不可控了

(1)先僅僅開啟rdb,寫入一些資料,然後kill -9殺掉redis程序,接著重啟redis,發現資料沒了,因為rdb快照還沒生成

(2)開啟aof的開關,啟用aof持久化

(3)寫入一些資料,觀察aof檔案中的日誌內容

(4)kill -9殺掉redis程序,重新啟動redis程序,發現資料被恢復回來了,就是從aof檔案中恢復回來的

redis中的資料其實有限的,很多資料可能會自動過期,可能會被使用者刪除,可能會被redis用快取清除的演算法清理掉

redis中的資料會不斷淘汰掉舊的,就一部分常用的資料會被自動保留在redis記憶體中

所以可能很多之前的已經被清理掉的資料,對應的寫日誌還停留在aof中,aof日誌檔案就乙個,會不斷的膨脹,到很大很大

所以aof會自動在後台每隔一定時間做rewrite操作,比如日誌裡已經存放了針對100w資料的寫日誌了; redis記憶體只剩下10萬; 基於記憶體中當前的10萬資料構建一套最新的日誌,到aof中; 覆蓋之前的老日誌; 確保aof日誌檔案不會過大,保持跟redis記憶體資料量一致

redis 2.4之前,還需要手動,開發一些指令碼,crontab,通過bgrewriteaof命令去執行aof rewrite,但是redis 2.4之後,會自動進行rewrite操作

在redis.conf中,可以配置rewrite策略

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

比如說上一次aof rewrite之後,是128mb

然後就會接著128mb繼續寫aof的日誌,如果發現增長的比例,超過了之前的100%,256mb,就可能會去觸發一次rewrite

但是此時還要去跟min-size,64mb去比較,256mb > 64mb,才會去觸發rewrite

(1)redis fork乙個子程序

(2)子程序基於當前記憶體中的資料,構建日誌,開始往乙個新的臨時的aof檔案中寫入日誌

(3)redis主程序,接收到client新的寫操作之後,在記憶體中寫入日誌,同時新的日誌也繼續寫入舊的aof檔案

(4)子程序寫完新的日誌檔案之後,redis主程序將記憶體中的新日誌再次追加到新的aof檔案中

(5)用新的日誌檔案替換掉舊的日誌檔案

用redis-check-aof --fix命令來修復破損的aof檔案

(1)如果rdb在執行snapshotting操作,那麼redis不會執行aof rewrite; 如果redis再執行aof rewrite,那麼就不會執行rdb snapshotting

(2)如果rdb在執行snapshotting,此時使用者執行bgrewriteaof命令,那麼等rdb快照生成之後,才會去執行aof rewrite

(3)同時有rdb snapshot檔案和aof日誌檔案,那麼redis重啟的時候,會優先使用aof進行資料恢復,因為其中的日誌更完整

資料恢復完全是依賴於底層的磁碟的持久化的,主要rdb和aof上都沒有資料,那就沒了

如何成為CSDN部落格專家

先看一下官方給出的要求 申請csdn部落格專家應具備的條件 2.部落格文章總的瀏覽量超過5萬次以上。3.文章內容的質量很高。5.如果已經在某it領域具有較大影響力,但是尚沒有達到上述申請條件的使用者,可以通過現有部落格專家的推薦,或者csdn編輯部推薦,暫時成為 特約專家 待達到上述條件之後,再轉為...

如何成為CSDN部落格專家

先看一下官方給出的要求 申請csdn部落格專家應具備的條件 2.部落格文章總的瀏覽量超過5萬次以上。3.文章內容的質量很高。5.如果已經在某it領域具有較大影響力,但是尚沒有達到上述申請條件的使用者,可以通過現有部落格專家的推薦,或者csdn編輯部推薦,暫時成為 特約專家 待達到上述條件之後,再轉為...

慶祝Dojo中文部落格成為CSDN部落格專家!

去年此時,我們正式開設了dojo中文部落格。目標很明確,就是能夠讓有需要的人在搜尋dojo中文資料時能看到最新最專業的技術文章。一年來,我們持續的關注dojo社群的最新進展,或者將最新的教程翻譯成中文 或者根據自己的經驗發布原創技術文章。我們也欣喜的看到越來越多的人開始關注dojo,將dojo應用到...