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