緩存穿透
一般的緩存系統,都是按照 key 去緩存查詢,如果不存在對應的 value,就應該去后端系統查找(比如DB)。一些惡意的請求會故意查詢不存在的 key,請求量很大,就會對后端系統造成很大的壓力。這就叫做緩存穿透。
如何避免?
1:對查詢結果為空的情況也進行緩存,緩存時間設置短一點,或者該 key 對應的數據 insert 了之后清理緩存。
2:對一定不存在的 key 進行過濾。可以把所有的可能存在的 key 放到一個大的 Bitmap 中,查詢時通過該 bitmap 過濾。
緩存雪崩
當緩存服務器重啟或者大量緩存集中在某一個時間段失效,這樣在失效的時候,會給后端系統帶來很大壓力。導致系統崩潰。
如何避免?
1:在緩存失效后,通過加鎖或者隊列來控制讀數據庫寫緩存的線程數量。比如對某個 key 只允許一個線程查詢數據和寫緩存,其他線程等待。
2:做二級緩存,A1 為原始緩存,A2 為拷貝緩存,A1 失效時,可以訪問 A2,A1 緩存失效時間設置為短期,A2 設置為長期
3:不同的 key,設置不同的過期時間,讓緩存失效的時間點盡量均勻
歡迎加入互聯網技術交流群共同學習共同進步