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