1. 程式人生 > 其它 >快取穿透 與 快取雪崩

快取穿透 與 快取雪崩

快取穿透

使用者用一個不存在的id(比如-1)發起請求查詢資料,快取和資料庫中都沒有這條資料,如果此時有人惡意發起大量的請求,由於快取中沒有資料,那麼這些請求將直接打到資料庫層,給資料庫帶來壓力。

  • 解決方案:第一次查詢結果為null時,可以放一個字串空("")到快取裡,這樣後面再次相同的請求就會獲得快取字串空,而不會因為沒有快取而去訪問資料庫了。當然為了不影響正常的業務查詢,需要給這個快取設定一個合理的過期時間,這樣就能夠防止快取穿透了。

快取雪崩

大量的快取設定了同一時間失效,而恰好在快取失效的同時,有大量的請求過來,此時這些請求將直接打到資料庫上,引起宕機,這就是快取雪崩。

  • 雪崩預防
    • 設定快取永不過期
    • 過期時間錯開
    • 多快取結合,例如:redis -> memcache -> db,memcache失效時間比redis設定的久一點
    • 採購第三方Redis