快取雪崩

簡介:快取同一時間大面積的失效,所以,後面的請求都會落到資料庫上,造成資料庫短時間內承受大量請求而崩掉。

解決辦法:

  • 事前:儘量保證整個 Redis 叢集的高可用性,發現機器宕機儘快補上。選擇合適的記憶體淘汰策略。

  • 事中:本地 Ehcache 快取 + Hystrix 限流&降級,避免 MySQL 崩掉。

  • 事後:利用 Redis 持久化機制儲存的資料儘快恢復快取。

快取穿透

簡介:一般是黑客故意去請求快取中不存在的資料,導致所有的請求都落到資料庫上,造成資料庫短時間內承受大量請求而崩掉。

解決辦法:有很多種方法可以有效地解決快取穿透問題,最常見的則是採用布隆過濾器,將所有可能存在的資料雜湊到一個足夠大的 bitmap 中。

一個一定不存在的資料會被這個 bitmap 攔截掉,從而避免了對底層儲存系統的查詢壓力。

另外也有一個更為簡單粗暴的方法(我們採用的就是這種),如果一個查詢返回的資料為空(不管是資料不存在,還是系統故障),我們仍然把這個空結果進行快取,但它的過期時間會很短,最長不超過五分鐘。