Redis | 緩存雪崩、緩存穿透、緩存預熱、緩存更新、緩存降級等問題

1、緩存雪崩

定義:因爲原有緩存失效,新緩存未到期間,直接致使原先查緩存的數據,直接所有去查數據庫了,對數據庫cpu和內存啥形成很大壓力,嚴重會形成數據庫宕機。數據庫

解決方案緩存

  • 一、使用鎖或隊列;保證來保證不會有大量的線程對數據庫一次性進行讀寫,從而避免失效時大量的併發請求落到底層存儲系統上
  • 二、設置過時標誌更新緩存;好比緩存時間爲20min,則緩存過時標記時間爲10min,當到了緩存過時標記的時候,則觸發通知另外的線程在後臺去更新實際key的緩存。
  • 三、爲key設置不一樣的緩存失效時間;在固定的一個緩存時間的基礎上+隨機一個時間做爲緩存失效時間
  • 四、二級緩存;設置一個有時間限制的緩存+一個無時間限制的緩存

2、緩存穿透

定義:緩存穿透指的是用戶查詢數據,在數據庫中沒有,天然在緩存中也沒有,每次查詢都是兩次無心義的查詢,也是繞過緩存,直接查數據庫的。微信

解決方案:採用布隆過濾器,將全部可能存在的數據哈希到一個足夠大的bitmap中,一個必定不存在的數據會被這個bitmap攔截掉,從而避免了對底層存儲系統的查詢壓力併發

備註:
布隆過濾器是什麼?spa

3、緩存預熱

定義:緩存預熱,就是在系統上線的後,將相關須要緩存數據直接加到緩存系統中。線程

解決思路隊列

  • 直接寫個緩存刷新頁面,上線時手工操做下
  • 數據量不大,能夠在項目啓動的時候自動進行加載
  • 定時刷新緩存

4、緩存更新

除Redis系統自帶的緩存失效策略,常見採用如下兩種:內存

  • 定時去清理過時的緩存;
  • 當有用戶請求過來時,再判斷這個請求所用到的緩存是否過時,過時的話就去底層系統獲得新數據並更新緩存。

5、緩存降級

降級的目的是保證核心服務可用,即便是有損的,並且有些服務是沒法降級的(如電商的購物流程等)it

在進行降級以前要對系統進行梳理,從而梳理出哪些必須保護,哪些可降級;電商

更多精彩內容,掃一掃下面的微信公衆號~
掃碼_搜索聯合傳播樣式-標準色版.png

相關文章
相關標籤/搜索