66.8-Redis持久化方案

成功者不是從不失敗棒妨,而是從不放棄甸陌!


總結(jié):

  1. Redis持久化方式:RDB(Redis DB)定時保存钠至、AOF(AppendOnlyFile)重演瞎惫;
  2. 分布式文件系統(tǒng):將文件分散在不同的節(jié)點上溜腐,不同節(jié)點上有多個副本;防止一部分壞了仍然可以使用瓜喇;

1. Redis持久化

持久化:將數(shù)據(jù)從掉電易失的內(nèi)存存放到能夠永久存儲的設(shè)備上

Redis服務(wù)是使用內(nèi)存來存儲數(shù)據(jù)挺益,如果掉電、服務(wù)崩潰都會導(dǎo)致Redis中數(shù)據(jù)丟失乘寒,如有必要矩肩,可以持久化數(shù)據(jù)。

Redis持久化方式:RDB(Redis DB)肃续、AOF(AppendOnlyFile)

1. RDB

在默認(rèn)情況下黍檩,Redis 將某時間點的數(shù)據(jù)庫快照保存在名字為 dump.rdb的二進(jìn)制文件中

策略
自動:按照配置文件中的條件滿足就執(zhí)行BGSAVE(后臺自動保存)
手動:客戶端發(fā)起SAVE、BGSAVE命令

配置
save 900 1 
save 300 10 
save 60 10000 
dbfilename dump.rdb 
dir /var/lib/redis/6379 

save 60 1000始锚,Redis要滿足在60秒內(nèi)至少有1000個鍵被改動刽酱,會自動保存一次
只要滿足上面3個條件之一,就自動執(zhí)行快照
執(zhí)行完后瞧捌,時間計數(shù)器和次數(shù)計數(shù)器都會歸零重新計數(shù)棵里。這多個條件不是疊加效果

SAVE命令:阻塞式命令,執(zhí)行期間不響應(yīng)客戶端的請求
BGSAVE:非阻塞命令姐呐,執(zhí)行期間還可以接收并處理客戶端請求殿怜,會folk一個子進(jìn)程創(chuàng)建RDB文件

192.168.142.135:6379> SAVE
192.168.142.135:6379> BGSAVE

優(yōu)點

  • 完全備份,不同時間的數(shù)據(jù)集備份可以做到多版本恢復(fù)
  • 緊湊的單一文件曙砂,方便網(wǎng)絡(luò)傳輸头谜,適合災(zāi)難恢復(fù)
  • 快照文件直接恢復(fù),大數(shù)據(jù)集速度較AOF快

缺點
會丟失最近寫入鸠澈、修改的而未能持久化的數(shù)據(jù)
folk過程非常耗時(消耗 內(nèi)存)柱告,會造成毫秒級不能響應(yīng)客戶端請求

RDB備份策略
創(chuàng)建一個定時任務(wù)cron job截驮,每小時或者每天將dump.rdb復(fù)制到指定目錄
確保備份文件名稱帶有日期時間信息,便于管理和還原對應(yīng)的時間點的快照版本
定時任務(wù)刪除過期的備份
如果有必要际度,跨物理主機(jī)葵袭、跨機(jī)架、異地備份

2. AOF

Append only ?le乖菱,采用追加的方式保存坡锡,默認(rèn)文件appendonly.aof 。
記錄所有的寫操作命令窒所,在服務(wù)啟動的時候使用這些命令就可以還原數(shù)據(jù)庫(重演)

AOF寫入機(jī)制

AOF方式不能保證絕對不丟失數(shù)據(jù)
目前常見的操作系統(tǒng)中鹉勒,執(zhí)行系統(tǒng)調(diào)用write函數(shù),將一些內(nèi)容寫入到某個文件里面時墩新,為了提高效率贸弥,系統(tǒng)通常不會直接將內(nèi)容寫入硬盤里面窟坐,而是先將內(nèi)容放入一個內(nèi)存緩沖區(qū)(bu?er)里面海渊,等到緩沖區(qū)被填滿,或者用戶執(zhí)行fsync調(diào)用和fdatasync調(diào)用時才將儲存在緩沖區(qū)里的內(nèi)容真正的寫入到硬盤里哲鸳,未寫入磁盤之前臣疑,數(shù)據(jù)可能會丟失

寫入磁盤的策略
appendfsync選項,這個選項的值可以是always徙菠、everysec或者no

Always:服務(wù)器每寫入一個命令讯沈,就調(diào)用一次fdatasync,將緩沖區(qū)里面的命令寫入到硬盤婿奔。這種模式下缺狠,服務(wù)器出現(xiàn)故障,也不會丟失任何已經(jīng)成功執(zhí)行的命令數(shù)據(jù)
Everysec(默認(rèn)):服務(wù)器每一秒重調(diào)用一次fdatasync萍摊,將緩沖區(qū)里面的命令寫入到硬盤挤茄。這種模式下,服務(wù)器出現(xiàn)故障冰木,最多只丟失一秒鐘內(nèi)的執(zhí)行的命令數(shù)據(jù)
No:服務(wù)器不主動調(diào)用fdatasync穷劈,由操作系統(tǒng)決定何時將緩沖區(qū)里面的命令寫入到硬盤。這種模式下踊沸,服務(wù)器遭遇意外停機(jī)時歇终,丟失命令的數(shù)量是不確定的

運(yùn)行速度:always的速度慢,everysec和no都很快

AOF重寫機(jī)制

寫操作越來越多的被記錄逼龟,AOF文件會很大评凝。Redis會合并寫操作,以壓縮AOF文件腺律。
合并重復(fù)的寫操作肥哎,AOF會使用盡可能少的命令來記錄辽俗。

重寫過程

  1. folk一個子進(jìn)程負(fù)責(zé)重寫AOF文件
  2. 子進(jìn)程會創(chuàng)建一個臨時文件寫入AOF信息
  3. 父進(jìn)程會開辟一個內(nèi)存緩沖區(qū)接收新的寫命令
  4. 子進(jìn)程重寫完成后,父進(jìn)程會獲得一個信號篡诽,將父進(jìn)程接收到的新的寫操作由子進(jìn)程寫入到臨時文件中
  5. 新文件替代舊文件

注:如果寫入操作的時候出現(xiàn)故障導(dǎo)致命令寫半截崖飘,可以使用redis-check-aof工具修復(fù)

原有AOF文件 重寫后的AOF文件
SELECT 0 SELECT 0
SADD fruits “apple” SADD fruits “apple” “banana” “cherry”
SADD fruits “banana” SET msg “hello world again!”
SADD fruits “cherry” RPUSH lst 3 5 7
SADD fruits “apple”
INCR counter
INCR counter
DEL counter
SET msg “hello world”
SET msg “hello world again!”
RPUSH lst 1 3 5
RPUSH lst 7
LPOP lst
AOF重寫觸發(fā)

手動:客戶端向服務(wù)器發(fā)送BGREWRITEAOF命令
自動:配置文件中的選項,自動執(zhí)行BGREWRITEAOF命令

auto-aof-rewrite-min-size <size> 杈女,觸發(fā)AOF重寫所需的最小體積:只要在AOF文件的體積大于等于size時朱浴,才會考慮是否需要進(jìn)行AOF重寫,這個選項用于避免對體積過小的AOF文件進(jìn)行重寫

auto-aof-rewrite-percentage <percent> 达椰,指定觸發(fā)重寫所需的AOF文件體積百分比:當(dāng)AOF文件的體積大于auto-aof-rewrite-min-size指定的體積翰蠢,并且超過上一次重寫之后的AOF文件體積的percent %時,就會觸發(fā)AOF重寫啰劲。(如果服務(wù)器剛剛啟動不久梁沧,還沒有進(jìn)行過AOF重寫,那么使用服務(wù)器啟動時載入的AOF文件的體積來作為基準(zhǔn)值)蝇裤。將這個值設(shè)置為0表示關(guān)閉自動AOF重寫

重寫配置舉例

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
當(dāng)AOF文件大于64MB時候廷支,可以考慮重寫AOF文件
只有當(dāng)AOF文件的增量大于起始size的100%時(就是文件大小翻了一倍),啟動重寫

appendonly yes
默認(rèn)關(guān)閉栓辜,請開啟

優(yōu)點
寫入機(jī)制恋拍,默認(rèn)fysnc每秒執(zhí)行,性能很好不阻塞服務(wù)藕甩,最多丟失一秒的數(shù)據(jù)
重寫機(jī)制施敢,可以優(yōu)化AOF文件體積
如果誤操作了(FLUSHALL等),只要AOF未被重寫狭莱,停止服務(wù)移除AOF文件尾部FLUSHALL命令僵娃,重啟Redis,可以將數(shù)據(jù)集恢復(fù)到FLUSHALL 執(zhí)行之前的狀態(tài)

缺點
相同數(shù)據(jù)集腋妙,AOF文件(文本)體積較RDB大了很多
恢復(fù)數(shù)據(jù)庫速度叫RDB慢(文本默怨,命令重演)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辉阶,隨后出現(xiàn)的幾起案子先壕,更是在濱河造成了極大的恐慌,老刑警劉巖谆甜,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垃僚,死亡現(xiàn)場離奇詭異,居然都是意外死亡规辱,警方通過查閱死者的電腦和手機(jī)谆棺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人改淑,你說我怎么就攤上這事碍岔。” “怎么了朵夏?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵蔼啦,是天一觀的道長。 經(jīng)常有香客問我仰猖,道長捏肢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任饥侵,我火速辦了婚禮鸵赫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘躏升。我一直安慰自己辩棒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布膨疏。 她就那樣靜靜地躺著一睁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪成肘。 梳的紋絲不亂的頭發(fā)上卖局,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天斧蜕,我揣著相機(jī)與錄音双霍,去河邊找鬼。 笑死批销,一個胖子當(dāng)著我的面吹牛洒闸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播均芽,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼丘逸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了掀宋?” 一聲冷哼從身側(cè)響起深纲,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎劲妙,沒想到半個月后湃鹊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡镣奋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年币呵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侨颈。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡余赢,死狀恐怖芯义,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妻柒,我是刑警寧澤扛拨,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站举塔,受9級特大地震影響鬼癣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜啤贩,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一待秃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧痹屹,春花似錦章郁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至楼肪,卻和暖如春培廓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背春叫。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工肩钠, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人暂殖。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓价匠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親呛每。 傳聞我的和親對象是個殘疾皇子踩窖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,700評論 2 345