Redis持久化之AOF

AOF(Append-Only-File)持久化:保存寫狀態(tài)
  • 記錄下除了查詢以外的所有變更數(shù)據(jù)庫狀態(tài)的指令
  • 以append的形式追加保存到AOF文件中(增量)
解決AOF文件大小不斷增大的問題,原理如下:

Redis 提供了bgrewriteaof 日志重寫指令用于對 AOF 日志進(jìn)行瘦身。其原理就是開辟一個(gè)子進(jìn)程對內(nèi)存進(jìn)行遍歷轉(zhuǎn)換成一系列 Redis 的操作指令,序列化到一個(gè)新的 AOF 日志文件中。(注意這里也是讀內(nèi)存,沒有管歷史文件)

  • 調(diào)用fork(),創(chuàng)建一個(gè)子進(jìn)程
  • 子進(jìn)程把新的AOF寫到一個(gè)臨時(shí)文件里,不依賴原來的AOF文件
  • 主進(jìn)程持續(xù)將新的變動(dòng)同時(shí)寫到內(nèi)存和原來的AOF里
  • 主進(jìn)程會(huì)獲取子進(jìn)程重寫AOF的完成信號,往新AOF同步增量變動(dòng)
  • 使用新的AOF文件替換掉舊的AOF文件
  • AOF恢復(fù)的過程像是把AOF日志文件里保存的命令重新執(zhí)行一遍一樣

重寫AOF文件的操作,并沒有讀取舊的AOF文件,而是將整個(gè)內(nèi)存中的數(shù)據(jù)庫內(nèi)容用命令的方式(相當(dāng)于rdb)重寫了一個(gè)新的AOF文件 重寫過程分析,建議大家都看看,加強(qiáng)理解

觸發(fā)AOF后臺重寫的條件

AOF重寫可以由用戶通過調(diào)用BgRewriteAOF手動(dòng)觸發(fā)。
服務(wù)器在AOF功能開啟的情況下,會(huì)維持以下三個(gè)變量:

  • 記錄當(dāng)前AOF文件大小的變量 aof_current_size。
  • 記錄最后一次AOF重寫之后,AOF文件的大小 aof_rewrite_base_size。
  • 增長百分比變量 aof_rewrite_perc

每次當(dāng)serverCron服務(wù)器周期性操作函數(shù))函數(shù)執(zhí)行時(shí),它會(huì)檢查以下條件是否全部滿足,如果全部滿足的話,就觸發(fā)自動(dòng)的AOF重寫操作:

  • 沒有BGSAVE命令(RDB持久化)/AOF持久化在執(zhí)行;
  • 沒有BGREWRITEAOF在進(jìn)行;
  • 當(dāng)前AOF文件大小要大于server.aof_rewrite_min_size(默認(rèn)為1MB)或者在redis.conf配置了auto-aof-rewrite-min-size大小;
  • 當(dāng)前AOF文件大小和最后一次重寫后的大小之間的比率大于或者等于指定的增長百分比(在配置文件設(shè)置了auto-aof-rewrite-percentage參數(shù),不設(shè)置默認(rèn)為100%)

如果前面三個(gè)條件都滿足,并且當(dāng)前AOF文件大小比最后一次AOF重寫時(shí)的大小要大于指定的百分比,那么觸發(fā)自動(dòng)AOF重寫。

當(dāng)既有RDB文件又有AOF文件時(shí)候,Redis啟動(dòng)時(shí)候用哪個(gè)呢?
RDB和AOF的優(yōu)缺點(diǎn)
  • RDB優(yōu)點(diǎn):全量數(shù)據(jù)快照,文件小,恢復(fù)快
  • RDB缺點(diǎn):無法保存最近一次快照之后的數(shù)據(jù)
  • AOF優(yōu)點(diǎn):本質(zhì)上是命令的執(zhí)行日志可讀性高,適合保存增量數(shù)據(jù),數(shù)據(jù)不易丟失
  • AOF缺點(diǎn):文件體積大,恢復(fù)時(shí)間長
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 上一篇提到了Redis的RDB持久化方式,同時(shí)也提到了一點(diǎn)關(guān)于AOF的內(nèi)容。 RDB(snapshotting) ...
    鄒志全閱讀 872評論 0 2
  • 一、Redis高可用概述 在介紹Redis高可用之前,先說明一下在Redis的語境中高可用的含義。 我們知道,在w...
    空語閱讀 1,686評論 0 2
  • 本文檔翻譯自http://redis.io/topics/persistence。 這篇文章提供了 Redis 持...
    daos閱讀 742評論 0 10
  • 企業(yè)級redis集群架構(gòu)的特點(diǎn) 海量數(shù)據(jù) 高并發(fā) 高可用 要達(dá)到高可用,持久化是不可減少的,持久化主要是做災(zāi)難恢復(fù)...
    lucode閱讀 2,285評論 0 7
  • 孩子開學(xué)有幾天了,做父母的總希望自己的孩子能和優(yōu)秀的孩子站在同一起跑線上, 今天,我的孩子做到了,但此時(shí)在我的心里...
    一粒米的修行閱讀 334評論 0 0

友情鏈接更多精彩內(nèi)容