1)緩存穿透是指查詢一個一定不存在的數據。由于緩存命不中時會去查詢數據庫,查不到數據則不寫入緩存,這將導致這個不存在的數據每次請求都要到數據庫去查詢,造成緩存穿透。
解決方案:
① 是將空對象也緩存起來,并給它設置一個很短的過期時間,最長不超過5分鐘
② 采用布隆過濾器,將所有可能存在的數據哈希到一個足夠大的bitmap中,一個一定不存在的數據會被這個bitmap攔截掉,從而避免了對底層存儲系統的查詢壓力
2)如果緩存集中在一段時間內失效,發生大量的緩存穿透,所有的查詢都落在數據庫上,就會造成緩存雪崩。
解決方案:
盡量讓失效的時間點不分布在同一個時間點
3)緩存擊穿,是指一個key非常熱點,在不停的扛著大并發,當這個key在失效的瞬間,持續的大并發就穿破緩存,直接請求數據庫,就像在一個屏障上鑿開了一個洞。
解決方案:
可以設置key永不過期