直播源碼開發(fā),面對常見問題的不同解決方案
緩存穿透、緩存擊穿、緩存雪崩,這些都是直播源碼開發(fā)在使用緩存時遇到的問題,根據(jù)直播源碼開發(fā)的服務(wù)行業(yè)不同,面對這些緩存問題時采用的解決方案也不一樣,具體方案我們來看一下。
?

一、緩存穿透
緩存穿透指的是緩存和數(shù)據(jù)庫中都沒有用戶想要的數(shù)據(jù),而用戶不斷發(fā)起請求,導(dǎo)致數(shù)據(jù)庫壓力越來越大,針對這個問題可用的方案有三種:驗證攔截、緩存空數(shù)據(jù)、使用布隆過濾器。
1、驗證攔截,接口層進(jìn)行校驗,如鑒定用戶權(quán)限,對ID之類的字段做基礎(chǔ)的校驗。優(yōu)勢在于,在發(fā)布內(nèi)容后需要維護(hù)最大id信息,實現(xiàn)也相對較簡單;缺點(diǎn)在于,僅滿足直播源碼開發(fā)關(guān)鍵值比如id信息連續(xù)或數(shù)據(jù)不稀疏的場景,維護(hù)最大id時,需要原子性以保持并發(fā)和遞增等一致性。
2、緩存空數(shù)據(jù),當(dāng)數(shù)據(jù)庫查詢到的數(shù)據(jù)為空時,也將這條數(shù)據(jù)進(jìn)行緩存,但緩存的有效性設(shè)置的要短,避免影響正常數(shù)據(jù)緩存。優(yōu)點(diǎn)在于,該方案可以保證對于數(shù)據(jù)庫的請求是一次性的,可以攔截直播源碼開發(fā)后續(xù)的重復(fù)請求,實現(xiàn)簡單、直接;如果提供的查詢值不重復(fù),則無法有效緩存。
?

二、緩存擊穿
緩存擊穿是直播源碼開發(fā)當(dāng)前熱點(diǎn)數(shù)據(jù)存儲到期時,多個線程同時并發(fā)訪問熱點(diǎn)數(shù)據(jù),因為緩存剛過期,所以并發(fā)請求都會到數(shù)據(jù)庫中查詢數(shù)據(jù),主要是由于數(shù)據(jù)訪問用戶并發(fā)高,由于緩存實效等原因,并發(fā)請求同時發(fā)起數(shù)據(jù)庫讀取操作。
解決方案:設(shè)置熱點(diǎn)數(shù)據(jù)永不過期;應(yīng)用級別鎖控制并發(fā);使用分布式鎖。
?

1、設(shè)置熱點(diǎn)數(shù)據(jù)永不過期,好處在于簡單,壞處在于需要task等其他方式維護(hù)數(shù)據(jù)更新。
2、應(yīng)用級別鎖控制并發(fā),僅保留1個請求去查詢并寫入緩存,其他請求重試取緩存讀取。好處在于可以減少同時發(fā)起請求的并發(fā)連接,直播源碼開發(fā)應(yīng)用級別支持,實現(xiàn)相對簡單;壞處在于未獲取到鎖的線程會阻塞,不適合緩存寫入等邏輯復(fù)雜。
聲明:以上內(nèi)容為云豹科技作者本人原創(chuàng),未經(jīng)作者本人同意,禁止轉(zhuǎn)載,否則將追究相關(guān)法律責(zé)任