Redis持久化之RDB
RDB (快照)持久化:保存某個(gè)時(shí)間點(diǎn)的全量數(shù)據(jù)快照。
在配置文件中進(jìn)行配置
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes # 當(dāng)備份進(jìn)程出錯(cuò)的時(shí)候就停止主進(jìn)程寫(xiě)入數(shù)據(jù)
rdbcompression yes # RDB備份文件是否開(kāi)啟壓縮,建議為no,redis本身就是CPU密集型進(jìn)程
以save 900 1為例,意思是在900s內(nèi),出現(xiàn)1一條數(shù)據(jù)變動(dòng)就進(jìn)行一次RDB備份。
Redis的持久化方式
? SAVE :阻塞Redis的服務(wù)器進(jìn)程,直到RDB文件被創(chuàng)建完畢
? BGSAVE : Fork出一-個(gè)子進(jìn)程來(lái)創(chuàng)建RDB文件,不阻塞服務(wù)器進(jìn)程
自動(dòng)化觸發(fā)RDB持久化的方式
- 根據(jù)redis.conf配置里的SAVE m n定時(shí)觸發(fā)(用的是BGSAVE )
- 主從復(fù)制時(shí)BGSAVE,主節(jié)點(diǎn)自動(dòng)觸發(fā)
- 執(zhí)行Debug Reload
- 執(zhí)行SHUTDOWN的時(shí)候沒(méi)有開(kāi)啟AOF持久化
BGSAVE原理

BGSAVE原理
系統(tǒng)調(diào)用fork() :創(chuàng)建進(jìn)程,實(shí)現(xiàn)了Copy-on-Write
Copy-on-Write
如果有多個(gè)調(diào)用者同時(shí)要求相同資源(如內(nèi)存或磁盤(pán)上的數(shù)據(jù)存儲(chǔ)),他們會(huì)共同獲取相同的指針指向相同的資源,直到某個(gè)調(diào)用者試圖修改資源的內(nèi)容時(shí),系統(tǒng)才會(huì)真正復(fù)制一份專(zhuān)用副本給該調(diào)用者,而其他調(diào)用者所見(jiàn)到的最初的資源仍然保持不變
使用RDB持久化的缺點(diǎn)
- 內(nèi)存數(shù)據(jù)的全量同步, 數(shù)據(jù)量大會(huì)由于I/O而嚴(yán)重影響性能
- 可能會(huì)因?yàn)镽edis掛掉而丟失從當(dāng)前至最近一-次快照期間的數(shù)據(jù)