本節(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、加上鎖,解決緩存擊穿的問題。