偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Redis緩存的三大問題與解決方案

數據庫 Redis
緩存空對象,針對這些惡意構建的key在Redis中緩存一個空值并設置一個過期時間,那么后續(xù)請求是不會到達Mysql上,而是直接通過Redis返回的一個空值給到用戶。

    Redis的三大緩存問題也就是緩存擊穿、緩存雪崩和緩存穿透,在生產環(huán)境中會因為這些原因造成請求繞過了Redis直接訪問數據庫,使得數據庫的負載增大,這樣不僅導致緩存的作用降低,甚至引發(fā)數據庫壓力過大而崩潰進而蔓延到整個系統(tǒng)無法使用。下面我們來聊聊Redis緩存的三大問題與解決方案。

1、緩存雪崩

    緩存雪崩指的是由于Redis里面同一時間出現(xiàn)了多個key同時失效,導致大量請求直接訪問數據庫,瞬間引發(fā)數據庫壓力激增,甚至導致數據庫崩潰,如下圖所示:

圖片圖片

解決方案:

(1)將Redis進行高可用的架構部署(主從+哨兵、集群),避免Redis出現(xiàn)全盤崩潰宕機的情況。

(2)使用本地緩存、Histrix限流降級、Nginx IP限流等等方法,避免Mysql被大流量沖垮,同時在緩存不可用時可以返回一些默認值或者降級的數據。

(3)針對于Redis里面的key設置一個合理的過期時間(如緩存的過期時間為隨機值),避免大量的key同時失效。

2、緩存擊穿

    緩存擊穿是指某個熱點數據A在緩存中失效的瞬間,此時又有大量的并發(fā)請求同時訪問該數據A,由于數據A在緩存中失效,大量請求同時訪問數據庫,造成數據庫壓力驟增。這種情況通常發(fā)生在熱點數據或訪問頻繁的數據上,如下如圖所示的:

圖片圖片

    通常Mysql只能支持2000個請求的并發(fā)量,Redis中的key_1正在承擔4000個請求的并發(fā)量,由于key_1瞬間失效導致4000個并發(fā)請求直接請求數據庫,可能就會導致Mysql瞬間宕機,進而蔓延整個系統(tǒng)都無法使用。

解決方案:

(1)給key設置一個合理的過期時間,可以將這個熱點數據設置為永不過期,或者及時的給熱點key進行續(xù)期。

(2)使用互斥鎖,我們可以基于Redis或Zookeeper實現(xiàn)一個互斥鎖,等待第一個請求構建緩存之后,再來釋放鎖。如下圖所示:

圖片圖片

    這樣后續(xù)的其他的請求就會通過Redis來查詢數據,那么大量的請求就不會到達Mysql上而導致其的性能下降甚至出現(xiàn)宕機的問題。

(3)對一些熱點數據提前加載并定期刷新緩存,防止緩存失效。

3、緩存穿透

    緩存穿透是指客戶端頻繁訪問一些根本不存在的緩存數據,由于緩存中沒有這些數據的記錄,每次請求都直接訪問數據庫導致數據庫壓力增大,但是數據庫中也不存在這個數據。

圖片圖片

    通常是由于攻擊者輸入非法或惡意構造的請求訪問服務,由于Redis緩存的不存在,此時大量請求都是直接到達Mysql上。

解決方案:

(1)緩存空對象,針對這些惡意構建的key在Redis中緩存一個空值并設置一個過期時間,那么后續(xù)請求是不會到達Mysql上,而是直接通過Redis返回的一個空值給到用戶。設置過期時間是因為隨著系統(tǒng)的運行這部分數據可能后面會產生,那么key的過期時間到了之后,key會被Redis刪除,后面有用戶正常來訪問的時候,這個key它會被重新緩存到Redis上。

(2)參數校驗,在系統(tǒng)前端或者應用層對請求的參數進行有效性驗證,過濾掉明顯無效或惡意的請求,如請求參數為主鍵id是大于0的,那么對于請求小于0的id參數是明顯不符合要求的,可以直接返回錯誤請求。

(3)布隆過濾器,判斷這些請求參數是否存在Redis和Mysql中,如果布隆過濾器判斷這些請求參數不存在Redis和Mysql中就直接返回,這樣惡意構建的這些請求就被攔截了,當然布隆過濾器存在一定的誤判率。

責任編輯:武曉燕 來源: 龍蝦編程
相關推薦

2018-11-12 12:12:15

架構師緩存數據庫

2022-06-21 13:48:30

Redis緩存

2024-12-02 01:16:53

2024-05-23 07:59:42

RedisKey性能

2010-05-12 14:18:58

Linux引導

2010-09-07 13:24:18

CSS

2018-05-30 08:10:34

智慧農業(yè)物聯(lián)網物聯(lián)網應用

2011-05-19 14:16:29

網頁設計

2010-10-08 16:31:08

AjaxIE6

2019-10-08 16:05:19

Redis數據庫系統(tǒng)

2018-11-12 11:12:46

2019-10-09 16:18:36

緩存架構雪崩

2009-09-15 10:46:06

Visual Stud

2017-02-16 16:01:07

人工智能解決方案

2021-09-13 22:31:24

人工智能疫情技術

2024-07-12 08:48:50

2021-01-31 10:51:37

緩存lock數據

2024-11-08 13:47:35

中文亂碼配置

2024-10-31 11:52:05

緩存預熱系統(tǒng)

2024-05-29 12:47:27

點贊
收藏

51CTO技術棧公眾號