Redis持久化(AOF)說明以及相關(guān)配置

說明

當(dāng)redis存儲非臨時數(shù)據(jù)時,為了降低redis故障而引起的數(shù)據(jù)丟失,redis提供了AOF(Append Only File)持久化琅坡,從單詞意思講强戴,將命令追加到文件亭螟。AOF可以將Redis執(zhí)行的每一條寫命令追加到磁盤文件(appendonly.aof)中,在redis啟動時候優(yōu)先選擇從AOF文件恢復(fù)數(shù)據(jù)挡鞍。由于每一次的寫操作,redis都會記錄到文件中预烙,所以開啟AOF持久化會對性能有一定的影響墨微,但是大部分情況下這個影響是可以接受的,我們可以使用讀寫速率高的硬盤提高AOF性能扁掸。與RDB持久化相比翘县,AOF持久化數(shù)據(jù)丟失更少,其消耗內(nèi)存更少(RDB方式執(zhí)行bgsve會有內(nèi)存拷貝)

-------------------------------------------------------------------

appendonly no#?

設(shè)置AOF持久化也糊,yes開啟炼蹦,no禁用,開啟后redis會把所接收到的每一次寫操作請求都追加到appendonly.aof文件中狸剃,當(dāng)redis重新啟動時掐隐,會從該文件恢復(fù)出之前的狀態(tài)。# 但是這樣會造成appendonly.aof文件過大钞馁,所以redis還支持了BGREWRITEAOF指令虑省,對appendonly.aof進(jìn)行重寫

appendfilename "appendonly.aof"? (指定AOF文件名,4.0無法通過config set 設(shè)置僧凰,只能通過修改配置文件設(shè)置探颈。)?

dir /etc/redis(RDB文件和AOF文件存放目錄)

1.追加寫入

  redis將每一條寫命令以redis通訊協(xié)議添加至緩沖區(qū)aof_buf,這樣的好處在于在大量寫請求情況下,采用緩沖區(qū)暫存一部分命令隨后根據(jù)策略一次性寫入磁盤训措,這樣可以減少磁盤的I/O次數(shù)伪节,提高性能。

2.同步命令到硬盤

  當(dāng)寫命令寫入aof_buf緩沖區(qū)后绩鸣,redis會將緩沖區(qū)的命令寫入到文件怀大,redis提供了三種同步策略,由配置參數(shù)appendfsync決定呀闻,下面是每個策略所對應(yīng)的含義:

appendfsync everysec

no:不使用fsync方法同步化借,而是交給操作系統(tǒng)write函數(shù)去執(zhí)行同步操作,在linux操作系統(tǒng)中大約每30秒刷一次緩沖捡多。這種情況下蓖康,緩沖區(qū)數(shù)據(jù)同步不可控,并且在大量的寫操作下垒手,aof_buf緩沖區(qū)會堆積會越來越嚴(yán)重蒜焊,一旦redis出現(xiàn)故障,數(shù)據(jù)丟失嚴(yán)重科贬。

always:表示每次有寫操作都調(diào)用fsync方法強制內(nèi)核將數(shù)據(jù)寫入到aof文件山涡。這種情況下由于每次寫命令都寫到了文件中, 雖然數(shù)據(jù)比較安全,但是因為每次寫操作都會同步到AOF文件中,所以在性能上會有影響鸭丛,同時由于頻繁的IO操作,硬盤的使用壽命會降低唐责。

everysec:數(shù)據(jù)將使用調(diào)用操作系統(tǒng)write寫入文件鳞溉,并使用fsync每秒一次從內(nèi)核刷新到磁盤。 這是折中的方案鼠哥,兼顧性能和數(shù)據(jù)安全熟菲,所以redis默認(rèn)推薦使用該配置。


no-appendfsync-on-rewrite no

AOF策略設(shè)置為always或者everysec時朴恳,后臺處理進(jìn)程(后臺保存或者AOF日志重寫)會執(zhí)行大量的I/O操作

在某些Linux配置中會阻止過長的fsync()請求抄罕。注意現(xiàn)在沒有任何修復(fù),即使fsync在另外一個線程進(jìn)行處理于颖,為了減緩這個問題呆贿,可以設(shè)置下面這個參數(shù)no-appendfsync-on-rewrite

auto-aof-rewrite-percentage 100(當(dāng)前AOF文件大小和最后一次重寫后的大小之間的比率等于或者等于指定的增長百分比,如100代表當(dāng)前AOF文件是上次重寫的兩倍時候才重寫森渐。)

auto-aof-rewrite-min-size 64mb(AOF文件最小重寫大小做入,只有當(dāng)AOF文件大小大于該值時候才可能重寫,4.0默認(rèn)配置64mb。)

當(dāng)AOF文件增長到一定大小的時候Redis能夠調(diào)用BGREWRITEAOF對日志文件進(jìn)行重寫同衣,它是這樣工作的:Redis會記住上次進(jìn)行寫日志后文件的大小(如果從開機以來還沒進(jìn)行過重寫竟块,那日志大小在開機的時候確定)。

基礎(chǔ)大小會同現(xiàn)在的大小進(jìn)行比較耐齐。如果現(xiàn)在的大小比基礎(chǔ)大小大制定的百分比浪秘,重寫功能將啟動

同時需要指定一個最小大小用于AOF重寫,這個用于阻止即使文件很小但是增長幅度很大也去重寫AOF文件的情況

重寫的策略(1,2,3):

1重復(fù)或無效的命令不寫入文件

2過期的數(shù)據(jù)不再寫入文件

3多條命令合并寫入(當(dāng)多個命令能合并一條命令時候會對其優(yōu)化合并作為一個命令寫入埠况,例如“RPUSH?list1a RPUSHlist1 b" 合并為“RPUSHlist1ab”)

重寫觸發(fā)條件?

AOF文件觸發(fā)條件可分為手動觸發(fā)和自動觸發(fā):

手動觸發(fā):客戶端執(zhí)行bgrewriteaof命令耸携。(可進(jìn)行實踐測試)

自動觸發(fā):自動觸發(fā)通過以下兩個配置協(xié)作生效:

auto-aof-rewrite-min-size: AOF文件最小重寫大小,只有當(dāng)AOF文件大小大于該值時候才可能重寫,4.0默認(rèn)配置64mb询枚。

auto-aof-rewrite-percentage:當(dāng)前AOF文件大小和最后一次重寫后的大小之間的比率等于或者等于指定的增長百分比违帆,如100代表當(dāng)前AOF文件是上次重寫的兩倍時候才重寫。

redis開啟在AOF功能開啟的情況下金蜀,會維持以下三個變量

1.記錄當(dāng)前AOF文件大小的變量aof_current_size刷后。

2.記錄最后一次AOF重寫之后,AOF文件大小的變量aof_rewrite_base_size渊抄。

3.增長百分比變量aof_rewrite_perc尝胆。

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

沒有BGSAVE命令(RDB持久化)/AOF持久化在執(zhí)行;

沒有BGREWRITEAOF在進(jìn)行;

當(dāng)前AOF文件大小要大于server.aof_rewrite_min_size的值贪染;

當(dāng)前AOF文件大小和最后一次重寫后的大小之間的比率等于或者大于指定的增長百分比(auto-aof-rewrite-percentage參數(shù))

---

auto-aof-rewrite-percentage 代表AOF文件每次重寫文件大谢呵骸(以百分?jǐn)?shù)代表),100表示百分之百杭隙,即當(dāng)文件增加了1倍(100%)哟绊,則開始重寫AOF文件

auto-aof-rewrite-min-size 設(shè)置最小重寫文件大小,避免文件小而執(zhí)行太多次的重寫

aof-load-truncated yes

當(dāng)redis突然運行崩潰時痰憎,會出現(xiàn)aof文件被截斷的情況票髓,Redis可以在發(fā)生這種情況時退出并加載錯誤,以下選項控制此行為铣耘。

如果aof-load-truncated設(shè)置為yes洽沟,則加載截斷的AOF文件,Redis服務(wù)器啟動發(fā)出日志以通知用戶該事件蜗细。

否則裆操,如果該選項設(shè)置為no,則服務(wù)器將中止并顯示錯誤并停止啟動鳄乏。當(dāng)該選項設(shè)置為no時跷车,用戶需要在重啟之前使用“redis-check-aof”實用程序修復(fù)AOF文件在進(jìn)行重啟

AOF實現(xiàn)本質(zhì)(可用明令 cat appendonly.aof查看文件格式)

AOF實現(xiàn)本質(zhì)是基于redis通訊協(xié)議,將命令以純文本的方式寫入到文件中橱野。

redis協(xié)議:

首先Redis是以行來劃分朽缴,每行以\r\n行結(jié)束。每一行都有一個消息頭水援,消息頭共分為5種分別如下:

(+) 表示一個正確的狀態(tài)信息密强,具體信息是當(dāng)前行+后面的字符。

(-) ?表示一個錯誤信息蜗元,具體信息是當(dāng)前行-后面的字符或渤。

(*) 表示消息體總共有多少行,不包括當(dāng)前行,*后面是具體的行數(shù)奕扣。

($) 表示下一行數(shù)據(jù)長度薪鹦,不包括換行符長度\r\n,$后面則是對應(yīng)的長度的數(shù)據(jù)。

(:) 表示返回一個數(shù)值惯豆,:后面是相應(yīng)的數(shù)字節(jié)符池磁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市楷兽,隨后出現(xiàn)的幾起案子地熄,更是在濱河造成了極大的恐慌,老刑警劉巖芯杀,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件端考,死亡現(xiàn)場離奇詭異雅潭,居然都是意外死亡,警方通過查閱死者的電腦和手機却特,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門扶供,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人核偿,你說我怎么就攤上這事诚欠。” “怎么了漾岳?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粉寞。 經(jīng)常有香客問我尼荆,道長,這世上最難降的妖魔是什么唧垦? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任捅儒,我火速辦了婚禮,結(jié)果婚禮上振亮,老公的妹妹穿的比我還像新娘巧还。我一直安慰自己,他們只是感情好坊秸,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布麸祷。 她就那樣靜靜地躺著,像睡著了一般褒搔。 火紅的嫁衣襯著肌膚如雪阶牍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天星瘾,我揣著相機與錄音走孽,去河邊找鬼。 笑死琳状,一個胖子當(dāng)著我的面吹牛磕瓷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播念逞,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼困食,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肮柜?” 一聲冷哼從身側(cè)響起陷舅,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎审洞,沒想到半個月后莱睁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體待讳,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年仰剿,在試婚紗的時候發(fā)現(xiàn)自己被綠了创淡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡南吮,死狀恐怖琳彩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情部凑,我是刑警寧澤露乏,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站涂邀,受9級特大地震影響瘟仿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜比勉,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一劳较、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浩聋,春花似錦观蜗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躯喇。三九已至怖竭,卻和暖如春可岂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背践樱。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工厂画, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拷邢。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓袱院,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瞭稼。 傳聞我的和親對象是個殘疾皇子忽洛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一、Redis高可用概述 在介紹Redis高可用之前环肘,先說明一下在Redis的語境中高可用的含義欲虚。 我們知道,在w...
    空語閱讀 1,593評論 0 2
  • 企業(yè)級redis集群架構(gòu)的特點 海量數(shù)據(jù) 高并發(fā) 高可用 要達(dá)到高可用悔雹,持久化是不可減少的复哆,持久化主要是做災(zāi)難恢復(fù)...
    lucode閱讀 2,194評論 0 7
  • Redis 提供了多種不同級別的持久化方式: 了解 RDB 持久化和 AOF 持久化之間的異同是非常重要的欣喧, 以下...
    笑Skr人啊閱讀 460評論 0 1
  • 我跟他算是處于冷戰(zhàn)中嗎唆阿?好像不是,我們并沒有爭吵锈锤,算是分手了嗎驯鳖?好像也不是,那天我們有重歸于好久免。算是........
    楊曉七閱讀 387評論 0 1
  • 年前的最后一個工作日結(jié)束浅辙,被朋友拉去看最近上映的韓國電影---與神同行⊙掷眩《與神同行》這個名字應(yīng)該是直接從韓文翻譯來...
    vivien_liu閱讀 948評論 0 1