快取雪崩:
比如給快取中的key設定了統一的過期時間,而在過期時間點,有大量的請求進來,這個時候redis中沒有用戶請求的資源,所以所有的請求會全部擁到資料庫,如果資料庫有報警監測的話,可能會報一下警,然后資料庫就掛掉了,如果這時候把資料重新起來,redis上還是沒有快取這些內容,資料庫還是會被再一次擊垮,
解決方法:
給key的過期時間設定一個隨機值,讓key的過期時間不集中到一塊,這樣即使有過期的,這樣的壓力,一般的redis集群都能扛下來,
快取擊穿:
某個key比較熱點,當有大量的用戶訪問時,如果這個key在這期間失效的話,會造成快取擊穿,
解決方法:
可以設定熱點資料和首頁資料不過期,如果主頁資料有更新的話,可以從資料庫重繪快取
快取穿透:
快取穿透就是用戶訪問的資料在快取中和資料庫中都不存在,資料庫的id都是從1自增加的,如果用戶用戶訪問一個id為-1的資料或者id特別大的資料,快取中和資料庫中找不到這個資料,就會造成快取穿透
解決辦法:
在介面層進行資料校驗,如果id<=0或者引數不合法,直接攔截,或者如果這個資料找不到的話,可以給這個key的value設定為null或者可以根據需要回傳一個“小可愛,您迷路了”,
注:
① redis可以做高可用、集群、哨兵加主從,可以避免全盤崩潰
② redis可以做持久化RDB+AOF,一旦重啟,可以自動從磁盤上加載資料,快速恢復快取資料(恢復資料時只需把備份檔案放到redis的安裝目錄即可)
③ 服務降級,進行資料限流(通過限流組件:這樣用戶可能單次訪問不到頁面,但是多刷幾次就出來了) ,這樣可以避免資料庫被直接打死
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/32640.html
標籤:NoSQL
