1. 緩存穿透
一般的緩存系統(tǒng),都是按照key去緩存查詢,如果不存在對用的value,就應(yīng)該去后端系統(tǒng)查找(比如DB數(shù)據(jù)庫)。一些惡意的請求會故意查詢不存在的key,請求量很大,就會對后端系統(tǒng)造成很大的壓力。這就叫做緩存穿透。
2. 怎么解決?
對查詢結(jié)果為空的情況也進行緩存,緩存時間設(shè)置短一點,或者該key對應(yīng)的數(shù)據(jù)insert之后清理緩存。
對一定不存在的key進行過濾。可以把所有的可能存在的key放到一個大的Bitmap中,查詢時通過該Bitmap過濾。
3. 緩存雪崩
當緩存服務(wù)器重啟或者大量緩存集中在某一時間段失效,這樣在失效的時候,會給后端系統(tǒng)帶來很大的壓力,導致系統(tǒng)崩潰。
4. 如何解決?
在緩存失效后,通過加鎖或者隊列來控制讀數(shù)據(jù)庫寫緩存的線程數(shù)量。
比如:
對某個key只允許一個線程查詢數(shù)據(jù)和寫緩存,其它線程等待;
做二級緩存;
不同的key,設(shè)置不同的過期時間,讓緩存失效的時間盡量均勻