緩存穿透
某個key緩存沒有,數據庫也沒有。一般這種情況發生了用戶惡意請求或者攻擊。造成一直不停查庫
解決方案
最頂層攔截,不合理的id直接打回去或者布隆過濾器
db如果差不多,設置個null進Redis,這樣下次就不會打到db,但是要注意合理的過期時間。
緩存雪崩
大批量不同的key同一時間到期,造成緩存失效,請求壓到數據庫。
解決方案
沒有很好的辦法,設置key的時候注意錯開過期時間,有些熱點數據甚至可以設置不過期
緩存擊穿
某個key緩存過期,但是數據庫有。正好這個點請求併發超高,還沒來的及寫緩存都壓到了數據庫上。
解決方案
加鎖!第一個請求來時,如果發現爲空,加鎖住讓後面的請求等待一下,參考多線程單例模式
分佈式緩存的效率問題
分佈式緩存需要經過網絡傳輸,既然有網絡,必然會有性能損耗,