緩存雪崩:在一個時間段內,有大量的key過期,或者Redis服務宕機,導致大量的請求到達數據庫,帶來巨大壓力
- 給key設置不同的TTL、利用Redis集群提高服務的高可用性、添加多級緩存、添加降級流策略
緩存擊穿:給某一個key設置了過期時間,當key過期的時間,恰好這個時間點有大量的并發請求訪問這個key,可能會瞬間把數據庫壓垮
- 互斥鎖:緩存失敗時,只允許一個請求去加載數據并更新緩存,其他請求阻塞等待
- 邏輯過期時間:不給key設置過期時間,而是添加一個邏輯過期時間字段,查詢緩存發現邏輯過期時間已過期時,再獲取互斥鎖,如果獲取成功,則開啟一個新線程去查詢數據并更新緩存,失敗則返回過期數據
緩存穿透;訪問一個不存在的數據,在數據庫沒有讀取到也不會直接寫入緩存,導致每次請求都到達數據庫,帶來壓力
- 緩存空數據:查詢返回的數據為空,仍然將空數據緩存;實現簡單、消耗內存
- 布隆過濾器:將可能存在的數據哈希到一個足夠大的bitmap,可以過濾掉一些不存在的數據,避免了DB的查詢
緩存預熱:在系統啟動或緩存失效后,提前將部分數據加載到Redis緩存中,提高系統的響應速度和性能