一、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會單獨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)點:
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ù)完整性和一致性要求不高喷楣。
缺點:
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)點:
1.可設(shè)置不同的同步策略屿储,默認(rèn)策略為每秒鐘同步一次贿讹,就算機(jī)器發(fā)生故障,最多只丟失一秒鐘的數(shù)據(jù)够掠;
2.只進(jìn)行追加操作的日志文件民褂,redis-check-aof工具可以輕易地修復(fù)因為某些原因而未寫入完整的命令;AOF文件過大時祖屏,可進(jìn)行重寫助赞;
3.AOF文件有序地保存了對數(shù)據(jù)庫執(zhí)行的所有寫入操作,文件的內(nèi)容非常容易被人讀懂袁勺,對文件進(jìn)行分析也很輕松;
4.程序會優(yōu)先使用aof方式來恢復(fù)數(shù)據(jù)集畜普,因為aof方式所保存的數(shù)據(jù)通常是最完整的期丰。
缺點:
1.對于相同的數(shù)據(jù)集來說,AOF文件的體積通常要大于RDB文件的體積吃挑,恢復(fù)速度慢于RDB钝荡;
2.根據(jù)所使用的同步策略,AOF的速度可能會慢于RDB舶衬。