目錄:
1、什么是RDB
2棵介、觸發(fā)機(jī)制-主要三種方式
3钉鸯、觸發(fā)機(jī)制-不容忽略方式
4、試驗(yàn)
1邮辽、什么是RDB
Redis是在內(nèi)存中的唠雕,RDB存儲在硬盤中。RDB持久化就是redis通過一條命令將redis內(nèi)存中的數(shù)據(jù)完整的生成一個(gè)快照保存到硬盤中吨述,就是一個(gè)RDB文件(二進(jìn)制保存)岩睁。當(dāng)我們需要恢復(fù)Redis,可以加載這個(gè)RDB文件將某時(shí)某刻的一個(gè)RDB備份文件恢復(fù)到Redis中
2揣云、觸發(fā)機(jī)制-主要三種方式(save捕儒、bgsave、自動)
-
save(同步)
save是一條同步的命令邓夕,就是說在它執(zhí)行這個(gè)命令之前其他的所有命令都需要去排隊(duì)等到它執(zhí)行之后再執(zhí)行其它命令
save命令
文件策略及復(fù)雜度 -
bgsave(異步)
bgsave 異步命令刘莹,表示執(zhí)行完該命令之后會立刻返回OK,然后在后頭單獨(dú)開啟一個(gè)線程去執(zhí)行
bgsave過程
-
save和bgsave的區(qū)別
命令 | save | bgsave |
---|---|---|
IO阻塞 | 同步 | 異步 |
阻塞焚刚? | 是 | 是(阻塞發(fā)生在fork) |
復(fù)雜度 | O(n) | O(n) |
優(yōu)點(diǎn) | 不會消耗額外內(nèi)存 | 不阻塞客戶端命令 |
缺點(diǎn) | 阻塞客戶端命令 | 需要fork点弯,消耗內(nèi)存 |
-
自動生成RDB
其實(shí)這樣的自動生成并不好,因?yàn)槲覀儫o法控制生成RDB文件的頻率或者說它生成RDB文件的頻率太高了矿咕。另外內(nèi)存中的數(shù)據(jù)寫一個(gè)快照到硬盤中抢肛,如果這個(gè)文件非常大的話或者說很頻繁去做這個(gè)操作的話狼钮,肯定會對硬盤有一定的壓力而且生成的一個(gè)規(guī)則也不太好控制,因?yàn)閷懭肓课覀儫o法控制捡絮,所以說這種其實(shí)不是一種很好的方式燃领。
3、觸發(fā)機(jī)制-不容忽略方式
1锦援、全量復(fù)制
主從要進(jìn)行復(fù)制的時(shí)候猛蔽,主會自動生成RDB文件
2、debug reload
debug重啟灵寺,不會將內(nèi)存清空的重啟曼库,會觸發(fā)RDB文件的生產(chǎn)
3、shutdown
4略板、試驗(yàn)
1毁枯、save命令是否真正的阻塞
2、bgsave fork的過程
3叮称、自動配置的save是否真的有效
4种玛、RDB長啥樣
實(shí)際操作
1、找到配置文件瓤檐,修改配置文件赂韵。因?yàn)閞edis一般都會做集群,所以pidfile挠蛉,logfile祭示,dbfilename 最好加上再多加上機(jī)器名或者別的作為區(qū)別區(qū)分。 我這邊是在本地測試谴古,所以以端口做區(qū)分质涛。
daemonize yes
pidfile /var/run/redis-6379.pid
logfile “6379.log”
dbfilename dump-6379.rdb
dir /Users/apple/data/redis/redis/data
#注釋掉
#save 900 1
#save 300 10
#save 60 1000
2、
往redis批量新增600w條數(shù)據(jù)進(jìn)行測試掰担,加入這么都數(shù)據(jù)是因?yàn)闇y試save的阻塞效果汇陆,在執(zhí)行save命令時(shí),其他命令會在其后面阻塞带饱,直至save命令執(zhí)行完毡代,后面的命令才能進(jìn)行執(zhí)行
3、執(zhí)行save命令纠炮,然后再執(zhí)行別的命令時(shí)月趟,會停頓灯蝴,直至save命令結(jié)束才會返回結(jié)果恢口,這里不好演示就不展示了
這時(shí)候rdb文件會生成到之前配置的dir的目錄下
4、bgsave命令操作
這里看出來fork出來了一個(gè)線程執(zhí)行bgsave
日志中也可查看bgsave命令的執(zhí)行情況
5穷躁、配置save 條件 自動執(zhí)行save 命令進(jìn)行rdb文件生成
因?yàn)殡S便滿足一個(gè)就會觸發(fā)耕肩,所以我們這里演示開啟的表示 60s 發(fā)生5次change因妇,就會自動的rdb文件生成。
我們在60秒內(nèi)觸發(fā)5次change猿诸,則會自動生成rdb文件
5婚被、RDB總結(jié)
- RDB是Redis內(nèi)存到硬盤的快照,用于持久化
- save通常會阻塞Redis
- bgsave不會阻塞Redis梳虽,但會fork新進(jìn)程
- save自動配置滿足任一就會被執(zhí)行
- 有些觸發(fā)機(jī)制不容忽視