緩存雪崩、緩存穿透、緩存預熱、緩存更新、緩存降級

一、緩存雪崩

緩存雪崩我們可以簡單理解爲:由於原來緩存失效(比如我們設置緩存時採用了相同的過期時間,在同一時刻出現大面積的緩存過期),新緩存未到,原來應該訪問緩存的請求都跑去查詢數據庫,而對數據庫CPU和內存造成巨大壓力,嚴重的會造成系統宕機,從而形成一系列連鎖反應,造成整個系統崩潰。

緩存雪崩對系統的衝擊是非常大的,可以使用隊列解決此問題。避免緩存失效時大量的併發請求落到底層系統上。還有一個解決方案是將緩存失效時間分開,避免大量緩存同時失效。

二、緩存穿透

緩存穿透是指用戶查詢數據時,在緩存中沒有,在數據庫中也沒有。這樣就導致用戶在查詢數據的時候,在緩存中找不到,在數據庫中再找一遍,相當於兩次無用的查詢。

有很多方法可以有效的解決緩存穿透問題,最常見的則是布隆過濾器。將所有可能的數據哈希到一個足夠大的bitmap中,一個一定不存在的數據會被bitmap攔截掉,從而避免了對底層存儲系統的查詢壓力。

三、緩存預熱

緩存預熱就是在系統上線後,將數據庫中的數據加載到緩存系統。這樣就避免了用戶在查詢數據的時候,先查詢緩存,再訪問數據庫的情況。

解決思路:

  • 數據量不大,可以在項目啓動的時候自動進行加載
  • 定時刷新緩存

四、緩存更新

除了緩存服務器自帶的緩存失效策略之外(Redis默認的有6種可供選擇),我們還可以根據需要自定義緩存淘汰系統。

五、緩存降級

當訪問量劇增,服務出現問題或非核心服務影響到核心服務時,要進行緩存降級,保證核心服務可用,即使是有損服務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章