吉林網(wǎng)站備案英文seo實(shí)戰(zhàn)派
redis中的數(shù)據(jù)存儲(chǔ)在緩存中,如果沒(méi)有持久化的策略,Redis一旦宕機(jī),那么將會(huì)導(dǎo)致數(shù)據(jù)丟失;因此redis提供了以下兩種持久化方式:RDB和AOF
一般來(lái)說(shuō),大部分公司對(duì)這兩種方式都是同時(shí)開(kāi)啟的
一、RDB
RDB策略全稱(chēng)Redis database backup file(Redis數(shù)據(jù)備份文件),也被叫做redis數(shù)據(jù)快照;簡(jiǎn)單來(lái)說(shuō)就是把緩存中所有的數(shù)據(jù)都記錄到磁盤(pán)中。
當(dāng)redis故障重啟的時(shí)候,從這個(gè)快照文件中讀取保存的數(shù)據(jù)以實(shí)現(xiàn)數(shù)據(jù)恢復(fù)
數(shù)據(jù)RDB有兩種方式:
1、手動(dòng)redis-cli執(zhí)行保存快照:
1、使用save命令,用主線程來(lái)將緩存中的數(shù)據(jù)保存到快照文件中
這種方式如果數(shù)據(jù)量大的話,會(huì)阻塞業(yè)務(wù),一般不用
2、使用使用bgsave命令,開(kāi)啟一個(gè)子進(jìn)程來(lái)執(zhí)行RDB,這樣你在后面?zhèn)浞?#xff0c;不影響正常的主業(yè)務(wù)允許
2、自動(dòng)保存快照頻率
自動(dòng)保存快照是開(kāi)啟一個(gè)子進(jìn)程進(jìn)行定時(shí)寫(xiě)入RDB文件,不會(huì)影響主進(jìn)程;在redis.conf中配置
# 代表:在900秒內(nèi),如果有1條redis中的key被修改,那么則執(zhí)行bgsave保存快照
save 900 1 # 代表:在300秒內(nèi),如果有10條redis中的key被修改,那么則執(zhí)行bgsave保存快照
save 300 10 # 代表:在60秒內(nèi),如果有10000條redis中的key被修改,那么則執(zhí)行bgsave保存快照
save 60?1000
具體使用什么頻率來(lái)保存,根據(jù)不同的業(yè)務(wù)場(chǎng)景來(lái)定
3、RDB的原理
bgsave開(kāi)始時(shí)會(huì)fork主進(jìn)程的到子進(jìn)程,子進(jìn)程共享主進(jìn)程的內(nèi)存數(shù)據(jù)。完成fork后讀取內(nèi)存數(shù)據(jù)并寫(xiě)入RDB文件。
fork采用 的是copy-only-write技術(shù):
- 當(dāng)主進(jìn)程執(zhí)行讀操作時(shí),主進(jìn)程直接訪問(wèn)共享內(nèi)存
- 當(dāng)主進(jìn)程執(zhí)行寫(xiě)操作時(shí),則主進(jìn)程會(huì)把要寫(xiě)的數(shù)據(jù)拷貝一份出來(lái)進(jìn)行寫(xiě)入,此時(shí)頁(yè)表進(jìn)行讀這一個(gè)數(shù)據(jù)時(shí),也會(huì)訪問(wèn)這個(gè)“副本”,最后把副本寫(xiě)入共享內(nèi)存,這樣就避免了臟數(shù)據(jù)的問(wèn)題
二、AOF
AOF全稱(chēng)為Append only file(追加文件)。Redis處理的每一個(gè)寫(xiě)命令都會(huì)記錄在AOF文件中,可以看做是命令日志文件,什么時(shí)候?qū)懭霐?shù)據(jù),對(duì)哪條數(shù)據(jù)進(jìn)行了修改都有記錄。
1、如何開(kāi)啟AOF
老版本的redis,默認(rèn)是不開(kāi)啟AOF功能的,需要修改redis.conf配置文件來(lái)開(kāi)啟AOF
# 是否開(kāi)啟AOF功能,默認(rèn)是no
appendonly yes
# AOF文件的名稱(chēng)
appendfilename "appendonly.aof"
2、AOF的命令記錄頻率
可以在redis.conf配置文件中修改:
# 1、表示每執(zhí)行一次寫(xiě)命令,立即記錄到AOF文件
# 優(yōu)點(diǎn):可靠性性高,幾乎不會(huì)丟數(shù)據(jù);缺點(diǎn):每次操作都寫(xiě)文件,性能低
appendfsync always# 2、寫(xiě)命令執(zhí)行完先放入AOF緩沖區(qū),然后表示每隔1秒將緩沖區(qū)的數(shù)據(jù)寫(xiě)入AOF文件,是默認(rèn)方案
# 優(yōu)點(diǎn):性能適中;缺點(diǎn):如果Redis宕機(jī),可能丟失這一秒的數(shù)據(jù)
appendfsync everysec# 3、寫(xiě)命令執(zhí)行完先放入AOF緩沖區(qū),然后由操作系統(tǒng)決定何時(shí)將緩沖區(qū)內(nèi)容寫(xiě)入磁盤(pán)
# 優(yōu)點(diǎn):性能最好;缺點(diǎn):如果Redis宕機(jī),可能丟失大量數(shù)據(jù)
appendfsync no
因?yàn)槭怯涗汻edis的寫(xiě)入命令,這導(dǎo)致AOF文件會(huì)比RDB文件大得多。而且AOF文件會(huì)記錄對(duì)同一個(gè)key的多次寫(xiě)操作,但是只有最后一次寫(xiě)操作才有意義(因?yàn)樽詈笠淮涡薷牡牟判枰4媛?#xff0c;前面的留著干啥)
通過(guò)手動(dòng)執(zhí)行bgrewriteaof命令(background rewrite aof后臺(tái)重寫(xiě)aof文件)可以讓aof文件執(zhí)行重寫(xiě)功能,用最少的命令達(dá)到同樣的效果(Redis恢復(fù),以及可以減少文件的大小)
Redis也可以在觸發(fā)閾值時(shí)自動(dòng)去重寫(xiě)AOF文件。閾值可以在redis.conf文件中配置:
# AOF文件比上次文件,增加超過(guò)多少百分比時(shí),則觸發(fā)重寫(xiě)
# 100代表如果AOF文件大小超過(guò)100%了(翻倍),則重寫(xiě)一次,也可以配置90 80之類(lèi)的
auto-aof-rewrite-percentage 100# AOF文件體積最小多大以上,才觸發(fā)重寫(xiě)
# 代表只有AOF文件超過(guò)64M大小了,才會(huì)重寫(xiě)
auto-aof-rewrite-min-size 64mb
三、RDB和AOF的優(yōu)缺點(diǎn)對(duì)比
在現(xiàn)實(shí)開(kāi)發(fā)場(chǎng)景中,大部分公司都是兩種策略都開(kāi)啟的