參考外部博文
一、Redis入墳
http://m.itdecent.cn/p/583d105cd2a5
二、Redis入墳(二)高級(jí)特性,發(fā)布訂閱、事務(wù)、Lua腳本
http://m.itdecent.cn/p/0070033af93a
三、Redis入墳(三)Redis為什么這么快?
http://m.itdecent.cn/p/9866165b2384
四、Redis入墳(四)Redis內(nèi)存回收知多少
http://m.itdecent.cn/p/8a34d1594046
五、Redis入墳(六)分布式集群,概念、原理、實(shí)操
http://m.itdecent.cn/p/199255aa7bf1
六、Redis入墳(八)內(nèi)存管理與優(yōu)化,面試必考
http://m.itdecent.cn/p/d39f087850c9
七、Redis入墳(番外篇)配置文件redis.conf,解析每個(gè)參數(shù)的含義
http://m.itdecent.cn/p/564c6cbd1cbc
一、redis持久化機(jī)制
https://www.cnblogs.com/xingzc/p/5988080.html
二、redis api相關(guān)操作
http://m.itdecent.cn/p/a21ea6828249
三、緩存穿透及布隆過(guò)濾器
http://m.itdecent.cn/p/60b036355523
四、緩存雪崩、集群搭建
http://m.itdecent.cn/p/436537e0f1bb
五、redis實(shí)現(xiàn)分布式鎖
http://m.itdecent.cn/p/71e066a3a456
RDB持久化
1.手動(dòng)觸發(fā)
save命令:主線程處理持久化,會(huì)阻塞client端發(fā)出的命令。
bgsave命令:主線程fork一個(gè)子線程處理持久化,主線程繼續(xù)處理client請(qǐng)求,主線程不阻塞。
2.自動(dòng)觸發(fā)RDB持久化 ,配置redis.conf
save 900 1 #在900秒(15分鐘)之后,如果至少有1個(gè)key發(fā)生變化,則dump內(nèi)存快照。
save 300 10 #在300秒(5分鐘)之后,如果至少有10個(gè)key發(fā)生變化,則dump內(nèi)存快照。
save 60 10000 #在60秒(1分鐘)之后,如果至少有10000個(gè)key發(fā)生變化,則dump內(nèi)存快照。
具體持久化流程
1). Redis先f(wàn)ork子進(jìn)程。
2). 子進(jìn)程將快照數(shù)據(jù)寫(xiě)入到臨時(shí)RDB文件中。
3). 當(dāng)子進(jìn)程完成數(shù)據(jù)寫(xiě)入操作后,再用臨時(shí)文件替換老的文件。
AOF持久化 redis.conf配置
# 是否啟用aof持久化方式 。否在每次更新操作后進(jìn)行日志記錄,Redis在默認(rèn)情況下是異步的把數(shù)據(jù)寫(xiě)入磁盤(pán),如果不開(kāi)啟,可能會(huì)在斷電時(shí)導(dǎo)致一段時(shí)間內(nèi)的數(shù)據(jù)丟失。
# 因?yàn)?redis本身同步數(shù)據(jù)文件是按上面save條件來(lái)同步的,所以有的數(shù)據(jù)會(huì)在一段時(shí)間內(nèi)只存在于內(nèi)存中。默認(rèn)為no
appendonly yes
#AOF持久化時(shí)機(jī),共有3個(gè)可選值:
# no:表示等操作系統(tǒng)進(jìn)行數(shù)據(jù)緩存同步到磁盤(pán)(快,持久化沒(méi)保證)
# always:同步持久化,每次發(fā)生數(shù)據(jù)變更時(shí),立即記錄到磁盤(pán)(慢,安全)
# everysec:表示每秒同步一次(默認(rèn)值,很快,但可能會(huì)丟失一秒以?xún)?nèi)的數(shù)據(jù))
# appendfsync always
appendfsync everysec
aof重寫(xiě)機(jī)制(即混合持久化機(jī)制)
1.手動(dòng)觸發(fā)
執(zhí)行bgrewriteaof命令
2.自動(dòng)觸發(fā)
#當(dāng)AOF文件增長(zhǎng)到一定大小的時(shí)候Redis能夠調(diào)用 BGREWRITEAOF 對(duì)日志文件進(jìn)行重寫(xiě) 。
#當(dāng)AOF文件大小大于該配置項(xiàng)時(shí)自動(dòng)開(kāi)啟重寫(xiě)
auto-aof-rewrite-min-size 64mb
#當(dāng)AOF文件增長(zhǎng)到一定大小的時(shí)候Redis能夠調(diào)用 BGREWRITEAOF 對(duì)日志文件進(jìn)行重寫(xiě) 。
#當(dāng)AOF文件大小的增長(zhǎng)率大于該配置項(xiàng)時(shí)自動(dòng)開(kāi)啟重寫(xiě)。
auto-aof-rewrite-percentage 100
3.no-appendfsync-on-rewrite參數(shù)
在執(zhí)行bgrewriteaof操作和主進(jìn)程寫(xiě)aof文件的操作,兩者都會(huì)操作磁盤(pán),而bgrewriteaof往往會(huì)涉及大量磁盤(pán)操作,這樣就會(huì)造成主進(jìn)程在寫(xiě)aof文件的時(shí)候出現(xiàn)阻塞的情形,現(xiàn)在no-appendfsync-on-rewrite參數(shù)出場(chǎng)了。如果該參數(shù)設(shè)置為no,是最安全的方式,不會(huì)丟失數(shù)據(jù),但是要忍受阻塞的問(wèn)題。如果設(shè)置為yes呢?這就相當(dāng)于將appendfsync設(shè)置為no,這說(shuō)明并沒(méi)有執(zhí)行磁盤(pán)操作,只是寫(xiě)入了緩沖區(qū),因此這樣并不會(huì)造成阻塞(因?yàn)闆](méi)有競(jìng)爭(zhēng)磁盤(pán)),但是如果這個(gè)時(shí)候redis掛掉,就會(huì)丟失數(shù)據(jù)。丟失多少數(shù)據(jù)呢?在linux的操作系統(tǒng)的默認(rèn)設(shè)置下,最多會(huì)丟失30s的數(shù)據(jù)。
因此,如果應(yīng)用系統(tǒng)無(wú)法忍受延遲,而可以容忍少量的數(shù)據(jù)丟失,則設(shè)置為yes。如果應(yīng)用系統(tǒng)無(wú)法忍受數(shù)據(jù)丟失,則設(shè)置為no。
#值為no代表不能忍受數(shù)據(jù)丟失
no-appendfsync-on-rewrite no
4.aof重寫(xiě)流程
