直播平臺(tái)開(kāi)發(fā),如果緩存中數(shù)據(jù)不一致發(fā)生,平臺(tái)該如何挽救
緩存是直播平臺(tái)開(kāi)發(fā)的重要幫手,在很多時(shí)候能夠幫助平臺(tái)化解訪問(wèn)壓力,但緩存的應(yīng)用也會(huì)出現(xiàn)新的問(wèn)題,比如緩存數(shù)據(jù)的不一致性,比如緩存雪崩、緩存穿透等問(wèn)題,面對(duì)這些問(wèn)題,直播平臺(tái)開(kāi)發(fā)該準(zhǔn)備什么樣的解決方案呢?
?

一、數(shù)據(jù)不一致性產(chǎn)生的原因
1、先操作緩存,再寫數(shù)據(jù)庫(kù)成功之前,如果有讀請(qǐng)求發(fā)生,可能導(dǎo)致舊數(shù)據(jù)進(jìn)入緩存,引發(fā)數(shù)據(jù)的不一致性,在分布式環(huán)境下,數(shù)據(jù)的讀寫都是并發(fā)的,一個(gè)服務(wù)多機(jī)器部署對(duì)同一個(gè)數(shù)據(jù)進(jìn)行讀寫,在數(shù)據(jù)庫(kù)層面并不能保證完成順序,就有可能后讀的操作先完成,這時(shí),如果直播平臺(tái)開(kāi)發(fā)不采用給緩存設(shè)置過(guò)期時(shí)間的策略,那該數(shù)據(jù)永遠(yuǎn)都是臟數(shù)據(jù)。
解決方案是:可采用更新前后雙刪除緩存策略;可以通過(guò)串行化解決,保證同一個(gè)數(shù)據(jù)的讀寫落在同一個(gè)后端服務(wù)商。
2、先操作數(shù)據(jù)庫(kù),再清除緩存,如果刪除緩存失敗了,就會(huì)出現(xiàn)數(shù)據(jù)不一致的問(wèn)題。
?

二、如何防止緩存穿透、緩存雪崩、緩存擊穿
1、緩存穿透,緩存穿透是說(shuō)直播平臺(tái)開(kāi)發(fā)收到一個(gè)請(qǐng)求后,但是該請(qǐng)求緩存中不存在,只能去直播平臺(tái)開(kāi)發(fā)數(shù)據(jù)庫(kù)中查詢,然后放進(jìn)緩存,但當(dāng)有好多請(qǐng)求同時(shí)訪問(wèn)一個(gè)數(shù)據(jù)時(shí),業(yè)務(wù)系統(tǒng)會(huì)把這些請(qǐng)求全發(fā)到數(shù)據(jù)庫(kù)中,或者惡意構(gòu)造一個(gè)邏輯上不存在的數(shù)據(jù),然后大量發(fā)送這個(gè)請(qǐng)求,這樣每次都會(huì)被發(fā)送到數(shù)據(jù)庫(kù),導(dǎo)致數(shù)據(jù)庫(kù)掛掉。
解決方法,對(duì)于惡意訪問(wèn),可以先做校驗(yàn),對(duì)惡意數(shù)據(jù)直接過(guò)濾掉;或者是緩存空結(jié)果,對(duì)查詢不存在的數(shù)據(jù)也記錄在緩存中,減少查詢數(shù)據(jù)庫(kù)的次數(shù)。
?

2、緩存雪崩,是指當(dāng)我們給直播平臺(tái)開(kāi)發(fā)所有的緩存設(shè)置了同樣的過(guò)期時(shí)間,當(dāng)某一時(shí)刻,整個(gè)緩存的數(shù)據(jù)全部過(guò)期了,然后瞬間所有的請(qǐng)求都被拋向了數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)就崩掉了。
解決方法,要么是分治,劃分更小的緩存區(qū)間,按區(qū)間過(guò)期;要么是給每一個(gè)key的過(guò)期時(shí)間加一個(gè)隨機(jī)值,避免同時(shí)過(guò)期,達(dá)到錯(cuò)峰刷新緩存的目的。
聲明:以上內(nèi)容為云豹科技作者本人原創(chuàng),未經(jīng)作者本人同意,禁止轉(zhuǎn)載,否則將追究相關(guān)法律責(zé)任