redis緩存雪崩、緩存擊穿和緩存穿透是什么

這篇文章主要介紹了redis緩存雪崩、緩存擊穿和緩存穿透是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇redis緩存雪崩、緩存擊穿和緩存穿透是什么文章都會有所收獲,下面我們一起來看看吧。

創(chuàng)新互聯(lián)公司是一家專業(yè)提供平山企業(yè)網站建設,專注與成都網站建設、做網站、H5高端網站建設、小程序制作等業(yè)務。10年已為平山眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網站制作公司優(yōu)惠進行中。

緩存雪崩

首先來看看緩存雪崩,緩存雪崩的概念就是:大量的請求沒有在Redis緩存中得到處理,從而導致請求都涌入到數(shù)據(jù)庫中,然后數(shù)據(jù)庫的壓力劇增。

引起緩存雪崩的原因可總結為2個:

  • 緩存中有大量的數(shù)據(jù)同時過期,這樣此時大量的請求都懟到數(shù)據(jù)庫了。

  • Redis緩存實例發(fā)生故障了,無法處理大量請求,也會導致請求都跑到數(shù)據(jù)庫去了。

先來看看第一個場景:緩存中大量的數(shù)據(jù)同時過期問題。

緩存中大量的數(shù)據(jù)同時過期

結合圖例來看,就是大量的數(shù)據(jù)在同一時間過期,然后此時又有很多的請求要讀取這些數(shù)據(jù)。當然就會發(fā)生緩存雪崩,從而導致數(shù)據(jù)庫壓力劇增了。

redis緩存雪崩、緩存擊穿和緩存穿透是什么

大量數(shù)據(jù)同時過期的解決方案

應對大量數(shù)據(jù)同時過期問題,通常有2種方案:

  • 數(shù)據(jù)過期設置增加隨機時間:也就是用expire命令給數(shù)據(jù)設置過期時間時,增加一個隨機的時間,比如數(shù)據(jù)a是5分鐘過期,在5分鐘的基礎上隨機增加10-120秒時間。這樣就能避免大量數(shù)據(jù)同時過期。

  • 服務降級:也就是發(fā)生緩存雪崩時,(1)若訪問的不是核心數(shù)據(jù),當沒有緩存命中時,不去數(shù)據(jù)庫了,直接返回預先設置好的信息,比如空值或者錯誤信息;(2)當訪問的是核心數(shù)據(jù),緩存未命中時,允許去數(shù)據(jù)庫查詢。這樣就將不是核心數(shù)據(jù)的請求都拒絕懟到數(shù)據(jù)庫了。

redis緩存雪崩、緩存擊穿和緩存穿透是什么

看完了大量數(shù)據(jù)同時過期的情況,再來看看Redis緩存實例故障的情況。

Redis緩存實例故障導致的緩存雪崩

這種情況下,Redis無法處理讀請求了,請求自然就懟到數(shù)據(jù)庫了。

通常來說,應對這種情況,我們也有2種方式:

  • 在業(yè)務系統(tǒng)中做好服務熔斷/請求限流

  • 事前預防:構建Redis高可靠集群,比如主從集群的主備切換。

服務熔斷,也就是當Redis發(fā)生故障時,暫停請求對緩存系統(tǒng)的訪問。等到Redis恢復正常了再打開請求訪問。

這種方式我們需要對Redis或數(shù)據(jù)庫的運行狀態(tài)進行監(jiān)控,比如MySQL的負載壓力、Redis的CPU使用率、內存使用率及QPS等。當發(fā)現(xiàn)Redis實例緩存雪崩了,就暫停服務。

這種情況能有效放置大量請求對數(shù)據(jù)庫造成壓力。但是會暫停請求訪問,對業(yè)務端的影響很大。

redis緩存雪崩、緩存擊穿和緩存穿透是什么

因此,為了減少對業(yè)務端的影響,我們可以使用請求限流方式,控制QPS,避免過多的請求懟到數(shù)據(jù)庫去。比如下面圖例,本身有2萬每秒的請求,但因為Redis故障宕機了。我們限流操作將qps降到2千每秒,數(shù)據(jù)庫處理2000的qps還是沒問題的。

redis緩存雪崩、緩存擊穿和緩存穿透是什么

緩存擊穿

緩存擊穿就是指個別訪問頻繁的熱點數(shù)據(jù)無法緩存命中,然后請求都涌入到數(shù)據(jù)庫中。它經常會在熱點數(shù)據(jù)過期時發(fā)生。

redis緩存雪崩、緩存擊穿和緩存穿透是什么

對于緩存擊穿問題,我們知道這些都是被訪問非常頻繁的熱點數(shù)據(jù),處理方式就簡單粗暴了,直接不設置過期時間了。等熱點數(shù)據(jù)不頻繁訪問再手動處理即可。

緩存穿透

緩存雪崩有些特別,它是指要訪問的數(shù)據(jù)既不在Redis緩存,也不在數(shù)據(jù)庫中。當大量請求進到系統(tǒng)時,Redis和數(shù)據(jù)庫都會有巨大壓力。

redis緩存雪崩、緩存擊穿和緩存穿透是什么

導致緩存穿透的原因通常有2種:

  • 數(shù)據(jù)被誤刪除了,導致緩存和數(shù)據(jù)庫都沒有數(shù)據(jù)了。然而客戶端是不知道的,還在瘋狂請求。

  • 有惡意攻擊的情況:也就是被人盯上了,專門去查沒有的數(shù)據(jù)。

對于緩存穿透的情況,解決方案可以參考下面幾種:

  • 是對緩存設置空值或者默認值。比如發(fā)生緩存穿透時,在Redis緩存中設置空值/默認值。后續(xù)查詢該值時就直接返回這個默認值了。

  • 使用布隆過濾器來判斷數(shù)據(jù)是否存在,避免從數(shù)據(jù)庫查詢。

  • 在前端就進行請求檢測。比如在前端將一些不合法的請求直接過濾,不要發(fā)到后端來處理。

第一點和第三點比較容易理解,這里就不展開描述。我們重點來看看第二點:布隆過濾器。

布隆過濾器

布隆過濾器主要用于判斷一個元素是否在一個集合中。它是由一個固定大小的二進制向量(可理解成默認為0的bit數(shù)組)和一系列的映射函數(shù)組成的。

我們首先來看看布隆過濾器是如何標記一個數(shù)據(jù)a的:

  • 第一步,會使用到多個映射函數(shù)(哈希函數(shù)),每個函數(shù)都會計算這個數(shù)據(jù)a的哈希值;

  • 第二步,這些計算得出的哈希值會分別對bit數(shù)組長度取模,這樣就得到每個哈希值在數(shù)組上的位置;

  • 第三步,把第二步得到的位置,分別在bit數(shù)組上設置為1。

通過這3個步驟,數(shù)據(jù)標記就完成了。然后要查詢數(shù)據(jù)在不在的時候是這樣做的:

  • 先計算這個數(shù)據(jù)在bit數(shù)組中的多個位置;

  • 然后分別查看bit數(shù)組的這些位置的bit值。只有每個位置的bit值都為1,說明數(shù)據(jù)才可能存在,否則數(shù)據(jù)一定不存在。

結合下圖來看,基本原理就是這樣。

redis緩存雪崩、緩存擊穿和緩存穿透是什么

關于“redis緩存雪崩、緩存擊穿和緩存穿透是什么”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“redis緩存雪崩、緩存擊穿和緩存穿透是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文名稱:redis緩存雪崩、緩存擊穿和緩存穿透是什么
URL標題:http://m.kartarina.com/article48/pphjhp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供定制網站商城網站Google電子商務靜態(tài)網站服務器托管

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網站建設
主站蜘蛛池模板: 国产AV无码专区亚洲AV毛网站| 少妇无码太爽了在线播放| 无码少妇一区二区| 少妇人妻无码精品视频app| 亚洲精品无码久久千人斩| 亚洲视频无码高清在线| av无码精品一区二区三区四区| 亚洲一区AV无码少妇电影☆| 亚洲综合一区无码精品| 成人无码一区二区三区| 中文字幕韩国三级理论无码| 国产精品无码久久久久久| 亚洲Aⅴ在线无码播放毛片一线天| 亚洲中文久久精品无码| 久久水蜜桃亚洲AV无码精品| 亚洲AV中文无码字幕色三| 成人麻豆日韩在无码视频| 无码一区二区三区老色鬼| 免费无码午夜福利片| 亚洲av无码无线在线观看| 无码内射中文字幕岛国片| 中文字幕无码第1页| 国产精品无码DVD在线观看| 无遮掩无码h成人av动漫| 久久亚洲精品无码AV红樱桃| 亚洲精品无码午夜福利中文字幕| 国产精品va无码免费麻豆| 中文字幕无码播放免费| 日韩人妻精品无码一区二区三区| 精品久久久久久无码免费| 成人免费无遮挡无码黄漫视频| 亚洲日韩精品A∨片无码加勒比| 无码精品一区二区三区免费视频| 亚洲中文字幕无码不卡电影| 人妻AV中出无码内射| 四虎影视无码永久免费| 国产精品无码素人福利| 成人无码一区二区三区| 国精品无码一区二区三区在线 | 日韩精品无码一区二区三区免费 | 成年无码av片完整版|