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