關于緩存的一些總結(jié)(3)

本節(jié)講解一下你即使項目中使用了緩存,在高并發(fā)的情況下可能遇到的問題
1、緩存穿透


image.png

如果有人惡意攻擊你的服務器,比如查詢編號為1000000萬的商品,那你數(shù)據(jù)庫沒有這樣一個商品,就需要查詢數(shù)據(jù)庫,即使數(shù)據(jù)庫中沒有,還是會給數(shù)據(jù)庫造成壓力,如果這個攻擊者使用壓力測試工具,對你造成瞬間的100W次訪問,這100W次的訪問都會查詢數(shù)據(jù)庫,造成數(shù)據(jù)庫壓力太大而崩潰。這就叫做緩存穿透。
解決方案就是:查詢一個商品,不管有沒有這個數(shù)據(jù),都需要在緩存中放個數(shù)據(jù),為了怕將來有個數(shù)據(jù),可以給這個緩存數(shù)據(jù)加上一個時間戳。
2、緩存雪崩


image.png

緩存雪崩就是熱點數(shù)據(jù)在同一時間集體失效,為啥會出現(xiàn)這個情況呢?因為我們給這些數(shù)據(jù)設置了同樣的過期時間。
解決方案:設置隨機的過期時間。
3、緩存擊穿


image.png

緩存擊穿是某一個熱點數(shù)據(jù),在訪問最頻發(fā)的時候失效,導致大量請求訪問數(shù)據(jù)庫。
所以需要保障同一個時間只有一個請求可訪問。其他請求需要等待。

綜上所述:我們在使用redis進行緩存數(shù)據(jù)時還是要考慮穿透、雪崩、擊穿這三個問題,具體就是在代碼中考慮三點即可:
1、查詢出來的空結(jié)果要緩存,解決緩存穿透的問題
2、設置過期時間【加上隨機值】,解決雪崩問題
3、加上鎖,解決緩存擊穿的問題。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容