天天看點

Redis 緩存雪崩、擊穿、穿透

1、Redis 緩存雪崩

一句話就是:大面積的緩存失效,Redis 相當于沒有了,直接将查詢請求打到資料庫,然後資料庫頂不住,崩了。

Redis 緩存雪崩、擊穿、穿透

例如:設定緩存更新時間為12:00, 但恰好有秒殺、促銷活動,一下湧進很多的請求,本來 Redis 還可以抗住,但因為此時緩存失效了,是以直接打到資料庫,但資料扛不住這麼多的請求,然後崩了。

解決方法:緩存失效時間可以設定為淩晨三四點鐘這段流量比較少的時候,另外 Redis 緩存失效時間加個随機值,避免同一時間大面積的緩存失效。

2、緩存擊穿(資料存在的)、穿透(請求不存在的資料)

緩存擊穿、穿透是兩個比較容易混淆的概念,還是一句話概括:

  • 緩存擊穿是一個非常熱點的資料(該資料是存在的),然而在請求量很大的時候突然失效了,也是直接将請求打到了資料庫。跟緩存雪崩不同的是,擊穿是小部分緩存失效,雪崩是大部分緩存失效。
  • 緩存穿透是一直請求資料不存在的資料,是以 Redis 沒有該資料的緩存,也是直接将請求打到了資料庫。

解決方法:

  • 緩存擊穿可以設定熱點資料永不過期,例如商城首頁、某個熱門活動,更新的時候選擇流量比較少的時間,更新完立馬重新整理緩存。
  • 緩存穿透:
    • 1、請求的參數檢驗,不合法的資料直接傳回錯誤
    • 2、布隆過濾器,布隆過濾器的特點,說不存在的資料的一定不存在,過濾不存在的資料請求
    • 3、拉黑惡意請求,配置每秒超過多少次的,一看就不是人手工操作發起的請求的 IP 直接拉黑