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