Redis RDB VS AOF

一、RDB

RDB持久化指在指定的時間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫入磁盤。這也是默認(rèn)的持久化方式,該方式是就是將內(nèi)存中數(shù)據(jù)以快照的方式寫入到二進(jìn)制文件中,默認(rèn)的文件名為dump.rdb,恢復(fù)的時候?qū)⒖煺瘴募苯幼x到內(nèi)存里。

RDB文件保存過程:

1.redis會單獨(dú)fork一個子進(jìn)程進(jìn)行持久化;

2.父進(jìn)程繼續(xù)處理client請求,子進(jìn)程負(fù)責(zé)將內(nèi)存內(nèi)容寫入到臨時文件;

3.當(dāng)子進(jìn)程將快照寫入臨時文件完畢后,用臨時文件替換原來的快照文件,然后子進(jìn)程退出。

優(yōu)點(diǎn):

1.一旦采用該方式,整個Redis數(shù)據(jù)庫將只包含一個文件,這樣非常方便進(jìn)行備份;

2.RDB可以最大化Redis的性能:父進(jìn)程在保存RDB文件時唯一要做的就是fork出一個子進(jìn)程,然后這個子進(jìn)程就會處理接下來的所有保存工作,父進(jìn)程無須執(zhí)行任何磁盤I/O操作;

3.適合大規(guī)模的數(shù)據(jù)恢復(fù);

4.對數(shù)據(jù)完整性和一致性要求不高。

缺點(diǎn):

1.一定時間間隔做一次備份,如果服務(wù)器意外掛掉,可能會丟失最后一次快照后的所有修改;

2.fork的時候,內(nèi)存中的數(shù)據(jù)被克隆了一份,大致2倍的膨脹性需要考慮。

二、AOF

redis以日志的形式記錄每個寫操作,會將每一個收到的寫命令都通過write函數(shù)追加到文件中(默認(rèn)是 appendonly.aof)。

appendfsync always:同步持久化,每次發(fā)生數(shù)據(jù)變更會被立即記錄到磁盤中;性能差,但數(shù)據(jù)完整性好;

appendfsync everysec:異步操作,每秒記錄,如果一秒內(nèi)宕機(jī),有數(shù)據(jù)丟失;

appendfsync no:從不同步

優(yōu)點(diǎn):

1.可設(shè)置不同的同步策略,默認(rèn)策略為每秒鐘同步一次,就算機(jī)器發(fā)生故障,最多只丟失一秒鐘的數(shù)據(jù);

2.只進(jìn)行追加操作的日志文件,redis-check-aof工具可以輕易地修復(fù)因?yàn)槟承┰蚨磳懭胪暾拿?;AOF文件過大時,可進(jìn)行重寫;

3.AOF文件有序地保存了對數(shù)據(jù)庫執(zhí)行的所有寫入操作,文件的內(nèi)容非常容易被人讀懂,對文件進(jìn)行分析也很輕松;

4.程序會優(yōu)先使用aof方式來恢復(fù)數(shù)據(jù)集,因?yàn)閍of方式所保存的數(shù)據(jù)通常是最完整的。

缺點(diǎn):

1.對于相同的數(shù)據(jù)集來說,AOF文件的體積通常要大于RDB文件的體積,恢復(fù)速度慢于RDB;

2.根據(jù)所使用的同步策略,AOF的速度可能會慢于RDB。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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