緩存穿透
概念
訪問一個(gè)不存在的key,緩存不起作用,請(qǐng)求會(huì)穿透到DB,流量大時(shí)DB會(huì)掛掉。
解決方案
- 采用布隆過濾器,使用一個(gè)足夠大的bitmap,用于存儲(chǔ)可能訪問的key,不存在的key直接被過濾;
- 訪問key未在DB查詢到值,也將空值寫進(jìn)緩存,但可以設(shè)置較短過期時(shí)間。
緩存雪崩
概念
大量的key設(shè)置了相同的過期時(shí)間,導(dǎo)致在緩存在同一時(shí)刻全部失效,造成瞬時(shí)DB請(qǐng)求量大、壓力驟增,引起雪崩。
解決方案
可以給緩存設(shè)置過期時(shí)間時(shí)加上一個(gè)隨機(jī)值時(shí)間,使得每個(gè)key的過期時(shí)間分布開來,不會(huì)集中在同一時(shí)刻失效。
緩存擊穿
概念
一個(gè)存在的key,在緩存過期的一刻,同時(shí)有大量的請(qǐng)求,這些請(qǐng)求都會(huì)擊穿到DB,造成瞬時(shí)DB請(qǐng)求量大、壓力驟增。
解決方案
在訪問key之前,采用SETNX(set if not exists)來設(shè)置另一個(gè)短期key來鎖住當(dāng)前key的訪問,訪問結(jié)束再刪除該短期key。