Redis缓存穿透、击穿、雪崩及主从复制
文章目錄
- Redis緩存穿透
- 概念
- 解決方案1-布隆過濾器
- 解決方案2-緩存空對象
- 緩存擊穿
- 概念
- 解決方案1-熱點(diǎn)數(shù)據(jù)永不過期
- 解決方案2-加互斥鎖
- 緩存雪崩
- 概念
- 解決方案1-Redis高可用
- 解決方案2-限流降級
- 解決方案3-數(shù)據(jù)預(yù)熱
- Redis主從復(fù)制
- 簡介
- 配置環(huán)境
- 一主兩從
- 兩種模式
- 哨兵模式
- 概述
- 哨兵的作用
- 故障切換的過程
Redis緩存穿透
查不到
概念
用戶需要查詢數(shù)據(jù)時(shí),發(fā)現(xiàn)Redis中沒有,也就是緩存沒有命中,于是就向持久層數(shù)據(jù)庫發(fā)起查詢,發(fā)現(xiàn)也沒有這個(gè)數(shù)據(jù),于是本次查詢失敗。
當(dāng)用戶很多的時(shí)候,緩存都沒有命中,又會(huì)請求數(shù)據(jù)庫,就會(huì)給數(shù)據(jù)庫帶來很大的壓力,這個(gè)就是緩存穿透
解決方案1-布隆過濾器
布隆過濾器是一種算法,是用戶檢測一個(gè)元素是否在一個(gè)集合中,存在一定的誤差
可以將所有可能查詢的參數(shù)以hash形式來進(jìn)行存儲,在控制層進(jìn)行校驗(yàn),不符合的則丟棄,從而避免對數(shù)據(jù)庫的查詢壓力
解決方案2-緩存空對象
當(dāng)存儲層不命中時(shí),及時(shí)返回一個(gè)空對象也將其緩存起來,同時(shí)會(huì)設(shè)置一個(gè)過期時(shí)間,之后在訪問這個(gè)數(shù)據(jù)會(huì)從緩存中獲取,既能保證數(shù)據(jù)的有效性也能保護(hù)后端數(shù)據(jù)庫
注意:
即使對緩存設(shè)置了過期時(shí)間,還是會(huì)有緩存和數(shù)據(jù)庫數(shù)據(jù)不一致的窗口期,對于需要保持一致性的業(yè)務(wù)會(huì)有影響
緩存擊穿
量太大,緩存過期
概念
緩存擊穿,指一個(gè)熱門的key在不停的高并發(fā)訪問,當(dāng)這個(gè)key過期的瞬間,持續(xù)的高并發(fā)的請求就穿破了緩存,直接請求數(shù)據(jù)庫當(dāng)key在過期的瞬間,大量的請求并發(fā)訪問,會(huì)同時(shí)訪問數(shù)據(jù)庫來處查詢最新的數(shù)據(jù),回寫到緩存,會(huì)導(dǎo)致數(shù)據(jù)庫瞬間壓力過大
解決方案1-熱點(diǎn)數(shù)據(jù)永不過期
熱點(diǎn)數(shù)據(jù)在緩存時(shí)不設(shè)置過期時(shí)間,所以不會(huì)出現(xiàn)熱點(diǎn)key過期后造成的數(shù)據(jù)庫壓力
解決方案2-加互斥鎖
分布式鎖的:使用分布式鎖,保持對每個(gè)key同時(shí)只有一個(gè)線程去查詢后端服務(wù),其他的線程沒有獲取分布式鎖的權(quán)限,只能等待。
緩存雪崩
概念
指在某一個(gè)時(shí)間段,緩存集中過期失效
集中過期,并不是致命問題,比較致命的是,是緩存服務(wù)器在某個(gè)節(jié)點(diǎn)宕機(jī)或者斷網(wǎng),一定的時(shí)間段內(nèi),數(shù)據(jù)庫的壓力聚增,對數(shù)據(jù)庫的壓力是不可預(yù)估的,很有可能就把數(shù)據(jù)庫壓宕機(jī)了
解決方案1-Redis高可用
單個(gè)Redis可能會(huì)掛點(diǎn),多增設(shè)幾臺Redis,這樣一臺掛掉之后其他的也可以繼續(xù)服務(wù),就是搭建緩存服務(wù)器集群(異地多活)
解決方案2-限流降級
在緩存失效后,通過加鎖或者隊(duì)列來控制讀寫數(shù)據(jù)庫的線程數(shù)量,比如對某個(gè)key只允許一個(gè)線程查詢數(shù)據(jù)和寫緩存,其他線程等待
解決方案3-數(shù)據(jù)預(yù)熱
在部署之前,先將可能的數(shù)據(jù)先預(yù)先訪問一遍,這樣部分大量訪問的數(shù)據(jù)就會(huì)加載到緩存 中,在即將發(fā)生大并發(fā)前手動(dòng)書法加載緩存不同的key,設(shè)置不同的過期時(shí)間,讓緩存失效的時(shí)間盡量均勻
Redis主從復(fù)制
簡介
主從復(fù)制:指的是一個(gè)Redis服務(wù)器的數(shù)據(jù),復(fù)制到其他的Redis服務(wù)器,前者稱為主節(jié)點(diǎn)(mater/leader)后者稱為從節(jié)點(diǎn)(slave/follower),數(shù)據(jù)的復(fù)制是單向,只能從主節(jié)點(diǎn)到從節(jié)點(diǎn),master以寫為主,slave節(jié)點(diǎn)以讀為主
默認(rèn)情況,每臺Redis服務(wù)器都是主節(jié)點(diǎn),且一個(gè)主節(jié)點(diǎn)可以有多個(gè)從節(jié)點(diǎn)(或者沒有從節(jié)點(diǎn)),但是一個(gè)從節(jié)點(diǎn)只能有一個(gè)主節(jié)點(diǎn)
主從復(fù)制作用:
1、數(shù)據(jù)冗余:主從復(fù)制實(shí)現(xiàn)的數(shù)據(jù)的熱備份,是持久化之外的一種數(shù)據(jù)冗余方式
2、故障恢復(fù):當(dāng)節(jié)點(diǎn)出現(xiàn)問題,可以從其他的節(jié)點(diǎn)提供數(shù)據(jù)服務(wù),實(shí)現(xiàn)快速的故障恢復(fù)
3、負(fù)載均衡:在主從復(fù)制的基礎(chǔ)上,配合讀寫分離,可以有主節(jié)點(diǎn)來提供寫服務(wù),由從節(jié)點(diǎn)提供讀服務(wù),分擔(dān)服務(wù)器負(fù)載,可以提高Redis的并發(fā)量
4、高可用:主從復(fù)制還是哨兵和集群實(shí)現(xiàn)的基礎(chǔ),主從復(fù)制是高可用的基礎(chǔ)
配置環(huán)境
配置環(huán)境主要配置從庫,不需要配置主庫
復(fù)制redis.conf配置文件,修改對應(yīng)信息 slaveof host ip
1、端口號
2、pid文件名
3、dump.rdb名稱
一主兩從
默認(rèn)的情況下,每臺Redis服務(wù)器都是主節(jié)點(diǎn),主要來配置從節(jié)點(diǎn)
兩種模式
一個(gè)主機(jī)兩個(gè)從機(jī)
鏈路模式
主機(jī)可以寫,從機(jī)是可以讀不能寫,主機(jī)中的所有的信息和數(shù)據(jù),都會(huì)保存到從機(jī)中
哨兵模式
主從切換技術(shù)的方法是:當(dāng)主服務(wù)器宕機(jī)后,需要手動(dòng)把一臺從服務(wù)器切換為主服務(wù)器,這就需要人工干預(yù),費(fèi)事費(fèi)力,還會(huì)造成一段時(shí)間內(nèi)服務(wù)不可用。這不是一種推薦的方式,更多時(shí)候,我們優(yōu)先考慮哨兵模式。
概述
哨兵模式是一種特殊的模式,首先Redis提供了哨兵的命令,哨兵是一個(gè)獨(dú)立的進(jìn)程,作為進(jìn)程,它會(huì)獨(dú)立運(yùn)行。其原理是哨兵通過發(fā)送命令,等待Redis服務(wù)器響應(yīng),從而監(jiān)控運(yùn)行的多個(gè)Redis實(shí)例。
哨兵的作用
1、通過發(fā)送命令,讓Redis服務(wù)器返回監(jiān)控其運(yùn)行狀態(tài),包括主服務(wù)器和從服務(wù)器。
2、當(dāng)哨兵監(jiān)測到master宕機(jī),會(huì)自動(dòng)將slave切換成master,然后通過發(fā)布訂閱模式通知其他的從服務(wù)器,修改配置文件,讓它們切換主機(jī)。
然而一個(gè)哨兵進(jìn)程對Redis服務(wù)器進(jìn)行監(jiān)控,可能會(huì)出現(xiàn)哨兵宕機(jī)問題,為此,我們可以使用多個(gè)哨兵進(jìn)行監(jiān)控。各個(gè)哨兵之間還會(huì)進(jìn)行監(jiān)控,這樣就形成了多哨兵模式。
故障切換的過程
假設(shè)主服務(wù)器宕機(jī),哨兵1先檢測到這個(gè)結(jié)果,系統(tǒng)并不會(huì)馬上進(jìn)行failover過程,僅僅是哨兵1主觀的認(rèn)為主服務(wù)器不可用,這個(gè)現(xiàn)象成為主觀下線。當(dāng)后面的哨兵也檢測到主服務(wù)器不可用,并且數(shù)量達(dá)到一定值時(shí),那么哨兵之間就會(huì)進(jìn)行一次投票,投票的結(jié)果由一個(gè)哨兵發(fā)起,進(jìn)行failover操作。切換成功后,就會(huì)通過發(fā)布訂閱模式,讓各個(gè)哨兵把自己監(jiān)控的從服務(wù)器實(shí)現(xiàn)切換主機(jī),這個(gè)過程稱為客觀下線。這樣對于客戶端而言,一切都是透明的。
總結(jié)
以上是生活随笔為你收集整理的Redis缓存穿透、击穿、雪崩及主从复制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SSM整合使用
- 下一篇: tps 数据库写并发衡量_MPP数据库简