RDB方式
费就、
RDB的含義就是將redis數(shù)據(jù)做一個(gè)快照創(chuàng)建一個(gè)RDB二進(jìn)制文件存在硬盤上诉瓦,如果redis宕機(jī)了,下次啟動(dòng)時(shí)候就可以從這個(gè)硬盤上讀取到內(nèi)存中力细,RDB默認(rèn)名字叫dump.rdb睬澡。
RDB的觸發(fā)方式三種
1.save(同步);
2.bgsave(異步)眠蚂;
3.自動(dòng)
第一種save流程圖
對(duì)redis執(zhí)行一個(gè)save命令煞聪,如果數(shù)據(jù)量比較大,會(huì)讓redis阻塞逝慧。此時(shí)會(huì)影響線上環(huán)境昔脯。
第二種 bgsave流程圖
對(duì)redis執(zhí)行一個(gè)bgsave命令啄糙,使用Linux的一個(gè)fork()函數(shù),創(chuàng)建一個(gè)redis的子進(jìn)程 創(chuàng)建RDB云稚,如果創(chuàng)建成功會(huì)向redis返回bgsave successfully,通常fork()函數(shù)是很快的隧饼,但是也有慢的時(shí)候。會(huì)阻塞redis主進(jìn)程.
第三種自動(dòng)生成RDB流程
在redis配置文件中配置方式静陈,如 save 60 10000,表示在60秒的時(shí)間內(nèi)數(shù)據(jù)如果改變了1萬次那么就調(diào)用bgsave命令燕雁,生成RDB文件,這樣方式可能會(huì)生成RDB頻率很高窿给,所以不建議使用贵白。
RDB方式缺點(diǎn):
非常的耗時(shí),因?yàn)樾枰獙⑺械臄?shù)據(jù)文件同步進(jìn)磁盤崩泡,這是一個(gè)O(N)的過程;
Fork()是一個(gè)copy-on-write的操作猬膨,還有IO寫到磁盤是很消耗性能的角撞。
2.AOF持久化方式
類似于寫日志的方式,當(dāng)對(duì)redis執(zhí)行一條命令勃痴,將會(huì)同步到AOF文件
AOF有三種方式:
第一種always,意思就是每次執(zhí)行一條redis命令都會(huì)同步到AOF文件谒所;
第二種everysec。指每秒種都同步一次redis的緩沖區(qū)到AOF文件沛申;
第三種no劣领,依靠操作系統(tǒng)來實(shí)現(xiàn),操作系統(tǒng)什么時(shí)候刷進(jìn)AOF隨操作系統(tǒng)铁材;
三種對(duì)比:
關(guān)于AOF重寫
有時(shí)候比如我們對(duì)redis進(jìn)行如下操作:
假如key剛開始是0尖淘,我們進(jìn)行incr(原子遞增)達(dá)到了一億次,此時(shí)key的值就等于一億著觉,但是此時(shí)在AOF文件當(dāng)中村生,也會(huì)有一億次的操作,實(shí)際等價(jià)與incrby(一億)饼丘,將這個(gè)一億次的incr操作優(yōu)化成Incrby(一億)就是AOF的重寫趁桃。
AOF的重寫方式:
方式一:1.使用bgrewriteaof命令
此redis發(fā)送一條bgrewriteaof,redis會(huì)返回ok肄鸽,然后fork一條子進(jìn)程去AOF重寫
(**注意這里AOF重寫不是真的重寫AOF文件卫病,而是從redis內(nèi)存中進(jìn)行重寫)
方式二:配置文件的方式,底層也是采用上面的命令典徘。
AOF流程解析:
redis收到命令之后會(huì)fork一個(gè)子進(jìn)程去重寫新的AOF文件蟀苛,而主進(jìn)程依然可以運(yùn)行,
如3-1烂斋,就是正常的AOF操作屹逛,此時(shí)主進(jìn)程也會(huì)生成一個(gè)aof_rewrite_buf础废,然后追加到新的AOF文件,最后一步新的AOF文件會(huì)替代舊的AOF文件罕模。