穿透
原因: 客戶端一直在查數據庫沒有的數據,導致沒有查緩存然後直接到了數據庫。
解決方式: 1. 布隆過濾器 :預先把數據ID全存在過濾器裏面(實時更新),當在查緩存爲空時,再判斷過濾器裏面有沒 有,沒有的話直接返回,有的話再查數據庫 。
2. 預存一個空數據然後在擊中的時候進行判斷
擊穿
原因 : 客戶端查一個正好過期的value,大量請求進來沒有查緩存然後直接到了數據庫。
解決方式 : 1.當緩存沒有數據時,查數據庫的時候加鎖,排隊只有一個線程拿到鎖,然後查數據庫更新緩存。其他線程等 待一會,然後再從緩存取。
2.用一個定時器在數據失效的時候定時進行更新
3.設置熱點數據永遠不過期
雪崩
原因 :大量緩存到期, 客戶端大量請求,沒有走緩存,直接到數據庫,導致數據庫奔潰。
解決方式: 1.如擊穿
2..分佈式部署緩存 過期時間設置隨機不固定