Redis 快取雪崩

2021-10-01 14:25:17 字數 982 閱讀 8144

快取層承載著大量請求,有效的保護了儲存層。

但是如果快取層由於某些原因整體不能提供服務(大面積宕機或者快取的內容失效等),會導致所有的請求都到達儲存層,儲存層的呼叫量暴增,造成儲存層宕機,系統崩潰。

在網上看到了乙個非常有趣的說法:

快取雪崩的英文原意是 stampeding herd(奔逃的野牛),指的是快取層宕掉後,流量會像奔逃的野牛一樣,打向後端儲存。

2-1、保證快取層的高可用性

使用 redis sentinel 和 redis cluster 搭建 redis 的高可用服務。

除非整個redis集群全部宕機,否則很難出現雪崩的問題。

2-2、變更系統架構,追加本地快取

可以考慮利用ehcache或者memcache在本地再追加一層快取層(local cache)。

利用本地快取層快取一部分核心資料,在redis全面崩潰的情況下,本地快取還可以暫時抵擋全部或者部分流量,避免給儲存層造成太大的負擔。

本地快取的失效時間等策略需要根據業務需求具體設計。

2-3、為儲存層追加限流、服務降級元件

在實際專案中,我們需要對重要的資源 (例如 redis、 mysql、 hbase、外部介面) 進行隔離,讓每種資源都單獨執行在自己的閉環中,即使個別資源出現了問題,也不會對其他服務造成影響。

為此,我們需要在系統中追加限流、服務降級元件(熔斷),實現資源隔離。

當訪問量劇增、服務出現問題仍然需要保證服務可用。系統可以根據一些關鍵資料進行自動降級,也可以配置開關實現人工降級。

降級的最終目的是保證核心服務可用,即使是有損的。

現階段最成熟的熔斷框架應該是netflix開源出來的hystrix,它也是 spring cloud 的重要元件。

另外阿里開源出來的限流系統 sentinel 也值得嘗試。

2-4、提前演練

專案上線前,演練快取層宕掉後,應用以及後端的負載情況以及可能出現的問題,在此基礎上做一些預案設定。

redis快取雪崩

今天來分享一下redis幾道常見的面試題 回顧一下我們為什麼要用快取 redis 現在有個問題,如果我們的快取掛掉了,這意味著我們的全部請求都跑去資料庫了。在前面學習我們都知道redis不可能把所有的資料都快取起來 記憶體昂貴且有限 所以redis需要對資料設定過期時間,並採用的是惰性刪除 定期刪除...

Redis快取穿透 快取雪崩

把redis作為快取使用已經是司空見慣,但是使用redis後也可能會碰到一系列的問題,尤其是資料量很大的時候,經典的幾個問題如下 一 快取和資料庫間資料一致性問題 分布式環境下 單機就不用說了 非常容易出現快取和資料庫間的資料一致性問題,針對這一點的話,只能說,如果你的專案對快取的要求是強一致性的,...

Redis 快取穿透 快取雪崩

目錄 1.快取穿透 如何避免?如何選擇?2 快取擊穿 如何解決 3.快取雪崩 如何解決?快取穿透 一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就應該去後端系統查詢 比如db 一些惡意的請求會故意查詢不存在的key,請求量很大,就會對後端系統造成很大的壓力,或導致資料庫異常。...