redis持久化簡介
redis有兩張持久化機(jī)制式塌,RDB和AOF,可以有效避免因進(jìn)程崩潰等情況造成數(shù)據(jù)丟失情況鞭光,下次重啟時(shí)就可以利用持久化文件進(jìn)行數(shù)據(jù)的恢復(fù)咳胃。
RDB持久化
RDB持久化技術(shù)是把當(dāng)前數(shù)據(jù)生成快照保存起來,可以通過手動觸發(fā)彤灶,也可以自動觸發(fā)看幼,手動觸發(fā)的命令主要由save和bgsave,但是運(yùn)行save命令的時(shí)候會阻塞進(jìn)程幌陕,直到快照生成完成诵姜,數(shù)據(jù)越多,阻塞時(shí)間越久搏熄,因此要小心甚至避免使用這個(gè)命令棚唆。而bgsave,可以fork一個(gè)子進(jìn)程心例,不影響主進(jìn)程宵凌。
下面情況會自動觸發(fā)RDB:
- 使用save配置,止后,save m n代表m秒內(nèi)有n次修改時(shí)瞎惫,觸發(fā)bgsave
- 主從模式下,若從節(jié)點(diǎn)執(zhí)行了全量復(fù)制译株,主節(jié)點(diǎn)會自動執(zhí)行bgsave生成EDB文件發(fā)送給從節(jié)點(diǎn)
- 執(zhí)行debug reload重載時(shí)微饥,也會觸發(fā)save操作
- 執(zhí)行shutdown時(shí),若沒有開啟AOF也會執(zhí)行bgsave
RDB文件一般保存在dir配置的目錄下古戴,文件名可通過dbfilename配置欠橘,可以通過命令動態(tài)配置:
config set dir{newDir}和config set dbfilename{newFileName}
RDB優(yōu)點(diǎn)
RDB文件是一個(gè)壓縮的二進(jìn)制文件,代表某個(gè)時(shí)間點(diǎn)的快照现恼,代表著全量更新肃续,恢復(fù)速度也快于AOF。
RDB缺點(diǎn)
沒辦法做到秒級持久化叉袍,無法實(shí)時(shí)始锚,屬于重量級操作,無法頻繁操作
AOF持久化
AOF(append only file):以日志記錄每次寫命令喳逛,重啟時(shí)執(zhí)行日志里的命令進(jìn)行恢復(fù)瞧捌,可以做到持久化的實(shí)時(shí)性,是redis持久化的主流技術(shù)。執(zhí)行過程是寫入命令(追加緩存)姐呐,文件同步(到磁盤)殿怜,文件重寫(定期壓縮),重啟加載(恢復(fù))曙砂。
開啟AOF需要進(jìn)行配置 appendonly yes头谜,默認(rèn)是關(guān)閉的。AOF寫入命令實(shí)際上先寫到緩沖區(qū)鸠澈,因?yàn)閞edis 是單線程的柱告,如果直接寫入磁盤,勢必造成io阻塞笑陈,寫入緩沖际度,系統(tǒng)會以一定的策略同步到文件,這個(gè)策略可以通過配置文件配置涵妥。重寫機(jī)制甲脏,可以定期對過期命令清除,合并命令等方式達(dá)到減少文件所占空間的目的妹笆,重寫也可以手動觸發(fā)或者自動觸發(fā)块请,重寫時(shí),會fork子進(jìn)程拳缠,不會對當(dāng)前進(jìn)程造成阻塞墩新。
當(dāng)RDB和AOF都開啟時(shí),優(yōu)先加載AOF窟坐,