Redis持久化(RDB 和 AOF)
一、RDB持久化
RDB(Redis DataBase):
配置文件中對其的相關(guān)配置:
觸發(fā)機(jī)制:
恢復(fù)rdb文件:
優(yōu)點(diǎn):
缺點(diǎn):
二、AOF持久化
AOF(Append Only File):
配置文件中對其的相關(guān)配置:
恢復(fù)aof文件:
優(yōu)點(diǎn):
缺點(diǎn):
Redis中的數(shù)據(jù)存在內(nèi)存中肯定是不安全的,所以需要將數(shù)據(jù)進(jìn)行持久化操作,防止數(shù)據(jù)丟失造成的危害。
?
一、RDB持久化
RDB(Redis DataBase):
在指定時(shí)間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)快照集體寫入磁盤,也就是Snapshot快照,恢復(fù)時(shí)將快照文件直接讀到內(nèi)存中。
Redis會(huì)單獨(dú)創(chuàng)建(fork)一個(gè)子進(jìn)程來進(jìn)行持久化,會(huì)先將數(shù)據(jù)寫入一個(gè)臨時(shí)文件中,待持久化過程都結(jié)束,再用這個(gè)臨時(shí)文件替換上次持久化好的文件。整個(gè)過程中,主進(jìn)程不進(jìn)行任何IO操作。這就確保了極高的性能。如果需要進(jìn)行大規(guī)模數(shù)據(jù)的恢復(fù),且對于數(shù)據(jù)恢復(fù)的完整性不是非常敏感,那RDB方式比AOF方式更加高效。RDB的缺點(diǎn)是最后一次持久化后的數(shù)據(jù)可能丟失。
默認(rèn)情況下是?RDB,一般不需要修改這個(gè)配置!
在主從復(fù)制中,rdb就是備用,從機(jī)上!
配置文件中對其的相關(guān)配置:
1、RDB保存的文件 dump.rdb (在生成環(huán)境中經(jīng)常將rdb文件備份)
2、RDB默認(rèn)的保存規(guī)則:900s中發(fā)生一次修改就進(jìn)行保存
觸發(fā)機(jī)制:
save的規(guī)則滿足情況下,自動(dòng)觸發(fā)rdb規(guī)則
執(zhí)行flushall命令,也會(huì)觸發(fā)rdb規(guī)則
退出redis(shut down 合理退出命令),也會(huì)產(chǎn)生rdb文件
備份就自動(dòng)生成一個(gè) dump.rdb 文件
恢復(fù)rdb文件:
只需將rdb文件放在redis啟動(dòng)目錄就可以,redis啟動(dòng)的時(shí)候會(huì)自動(dòng)檢查dump.rdb 恢復(fù)其中的數(shù)據(jù)!
查看需要存放的位置:config get dir
優(yōu)點(diǎn):
適合大規(guī)模的數(shù)據(jù)恢復(fù)!(父進(jìn)程不參與數(shù)據(jù)的保存恢復(fù),而是fork子進(jìn)程管理,效率高)
對數(shù)據(jù)完整性要求不高!(比如300s內(nèi)更新了9次突然宕機(jī)了,那最后的數(shù)據(jù)沒來得及保存就丟失了)
缺點(diǎn):
需要一定的時(shí)間間隔進(jìn)行操作!如果redis意外當(dāng)即,最后一次修改數(shù)據(jù)就沒
fork進(jìn)程的時(shí)候,會(huì)占用一定的資源!
?
二、AOF持久化
AOF(Append Only File):
以日志的形式將我們的所有命令都記錄下來(寫記錄讀不記錄),秩序罪加文件不可更改文件,redis重啟會(huì)去讀該文件重新構(gòu)建數(shù)據(jù),換言之,把這個(gè)文件中指令全部再執(zhí)行一遍。
配置文件中對其的相關(guān)配置:
1、保存在 appendonly.aof(默認(rèn)不開啟,開啟需要手動(dòng)配置)
2、持久化策略(默認(rèn)每秒寫一次)
3、重寫規(guī)則
默認(rèn)是文件的無限追加,文件會(huì)越來越大!
當(dāng)文件大小超過64m,fork一個(gè)新的進(jìn)程來講我們的文件進(jìn)行重寫
?
恢復(fù)aof文件:
破壞/損壞 aof 文件后,無法啟動(dòng)redis(如果默認(rèn)時(shí)aof模式下)
此時(shí),可以用 redis-check-aof 來修復(fù)
?
優(yōu)點(diǎn):
每次修改都同步,文件的完整性會(huì)更好!
沒秒同步一次,可能會(huì)丟失一秒的數(shù)據(jù)!
從不同步,效率最高的!
缺點(diǎn):
相對于數(shù)據(jù)文件來說,aof遠(yuǎn)遠(yuǎn)大于rdb,修復(fù)的速度也比rdb慢!
aof運(yùn)行效率也要比rdb慢,所以redis默認(rèn)配置是rdb!
性能建議:
因?yàn)镽DB文件只用作后備用途,建議只在Slave上持久化RDB文件,而且只要15分鐘備份一次就夠 了。
如果Enable AOF ,好處是在最惡劣情況下也只會(huì)丟失不超過兩秒數(shù)據(jù),啟動(dòng)腳本較簡單只load自己的 AOF文件就可以了,代價(jià)一是帶來了持續(xù)的IO,二是AOF rewrite 的最后 將 rewrite過程中產(chǎn)生的新數(shù)據(jù)寫到新文件造成的阻塞幾乎是不可避免的。
只要硬盤許可,應(yīng)該盡量減少AOF rewrite的頻率,AOF重寫的基礎(chǔ)大小默認(rèn)值64M太小了,可以設(shè)到5G以上,,默認(rèn)超過原大小100%大小重寫可以改到適當(dāng)?shù)臄?shù)值。
如果不Enable AOF,僅靠 Master-Slave Repllcation 實(shí)現(xiàn)高可用性也可以,能省掉一大筆IO,也 減少了rewrite時(shí)帶來的系統(tǒng)波動(dòng)。代價(jià)是如果Master/Slave 同時(shí)掛了,會(huì)丟失十幾分鐘的數(shù)據(jù), 啟動(dòng)腳本也要比較兩個(gè) Master/Slave 中的 RDB文件,載入較新的那個(gè),微博就是這種架構(gòu)。
?
總結(jié)
以上是生活随笔為你收集整理的Redis持久化(RDB 和 AOF)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 以DES的方式实现对称加密,并提供密钥
- 下一篇: ChineseSemanticKB,面向