快取穿透 與 快取雪崩
阿新 • • 發佈:2021-09-01
快取穿透
使用者用一個不存在的id(比如-1)發起請求查詢資料,快取和資料庫中都沒有這條資料,如果此時有人惡意發起大量的請求,由於快取中沒有資料,那麼這些請求將直接打到資料庫層,給資料庫帶來壓力。
- 解決方案:第一次查詢結果為null時,可以放一個字串空("")到快取裡,這樣後面再次相同的請求就會獲得快取字串空,而不會因為沒有快取而去訪問資料庫了。當然為了不影響正常的業務查詢,需要給這個快取設定一個合理的過期時間,這樣就能夠防止快取穿透了。
快取雪崩
大量的快取設定了同一時間失效,而恰好在快取失效的同時,有大量的請求過來,此時這些請求將直接打到資料庫上,引起宕機,這就是快取雪崩。
- 雪崩預防
- 設定快取永不過期
- 過期時間錯開
- 多快取結合,例如:redis -> memcache -> db,memcache失效時間比redis設定的久一點
- 採購第三方Redis