redis的緩存雪崩、緩存穿透和緩存擊穿

  

緩存雪崩:redis

好比給緩存中的key設置了統一的過時時間,而在過時時間點,有大量的請求進來,這個時候redis中沒有用戶請求的資源,因此全部的請求會所有擁到數據庫,若是數據庫有報警監測的話,可能會報一下警,而後數據庫就掛掉了。若是這時候把數據從新起來,redis上仍是沒有緩存這些內容,數據庫仍是會被再一次擊垮。數據庫

解決方法:緩存

給key的過時時間設置一個隨機值,讓key的過時時間不集中到一塊。這樣即便有過時的,這樣的壓力,通常的redis集羣都能扛下來。接口

緩存擊穿:資源

某個key比較熱點,當有大量的用戶訪問時,若是這個key在這期間失效的話,會形成緩存擊穿。集羣

解決方法:redis集羣

能夠設置熱點數據和首頁數據不過時,若是主頁數據有更新的話,能夠從數據庫刷新緩存高可用

緩存穿透:請求

緩存穿透就是用戶訪問的數據在緩存中和數據庫中都不存在。數據庫的id都是從1自增長的,若是用戶用戶訪問一個id爲-1的數據或者id特別大的數據,緩存中和數據庫中找不到這個數據,就會形成緩存穿透方法

解決辦法:

在接口層進行數據校驗,若是id<=0或者參數不合法,直接攔截。或者若是這個數據找不到的話,能夠給這個key的value設置爲null或者能夠根據須要返回一個小可愛,您迷路了。

注:

① redis能夠作高可用、集羣、哨兵加主從,能夠避免全盤崩潰② redis能夠作持久化RDB+AOF,一旦重啓,能夠自動從磁盤上加載數據,快速恢復緩存數據③ 服務降級,進行數據限流(經過限流組件:這樣用戶可能單次訪問不到頁面,可是多刷幾回就出來了) ,這樣能夠避免數據庫被直接打死

相關文章
相關標籤/搜索