日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Redis緩存問題(圖解:三種緩存問題)
在實(shí)際的業(yè)務(wù)場(chǎng)景中,Redis 一般和其他數(shù)據(jù)庫搭配使用,用來減輕后端數(shù)據(jù)庫的壓力,比如和關(guān)系型數(shù)據(jù)庫 mysql 配合使用。

蘭陵網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站成立與2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。

Redis 會(huì)把 MySQL 中經(jīng)常被查詢的數(shù)據(jù)緩存起來,比如熱點(diǎn)數(shù)據(jù),這樣當(dāng)用戶來訪問的時(shí)候,就不需要到 MySQL 中去查詢了,而是直接獲取 Redis 中的緩存數(shù)據(jù),從而降低了后端數(shù)據(jù)庫的讀取壓力。如果說用戶查詢的數(shù)據(jù) Redis 沒有,此時(shí)用戶的查詢請(qǐng)求就會(huì)轉(zhuǎn)到 MySQL 數(shù)據(jù)庫,當(dāng) MySQL 將數(shù)據(jù)返回給客戶端時(shí),同時(shí)會(huì)將數(shù)據(jù)緩存到 Redis 中,這樣用戶再次讀取時(shí),就可以直接從 Redis 中獲取數(shù)據(jù)。流程圖如下所示:



圖1:緩存使用流程圖

 

在使用 Redis 作為緩存數(shù)據(jù)庫的過程中,有時(shí)也會(huì)遇到一些棘手問題,比如常見緩存穿透、緩存擊穿和緩存雪崩等問題,本節(jié)將對(duì)這些問題做簡(jiǎn)單地說明,并且提供有效的解決方案。

緩存穿透

緩存穿透是指當(dāng)用戶查詢某個(gè)數(shù)據(jù)時(shí),Redis 中不存在該數(shù)據(jù),也就是緩存沒有命中,此時(shí)查詢請(qǐng)求就會(huì)轉(zhuǎn)向持久層數(shù)據(jù)庫 MySQL,結(jié)果發(fā)現(xiàn) MySQL 中也不存在該數(shù)據(jù),MySQL 只能返回一個(gè)空對(duì)象,代表此次查詢失敗。如果這種類請(qǐng)求非常多,或者用戶利用這種請(qǐng)求進(jìn)行惡意攻擊,就會(huì)給 MySQL 數(shù)據(jù)庫造成很大壓力,甚至于崩潰,這種現(xiàn)象就叫緩存穿透。

為了避免緩存穿透問題,下面介紹兩種解決方案:

1) 緩存空對(duì)象

當(dāng) MySQL 返回空對(duì)象時(shí), Redis 將該對(duì)象緩存起來,同時(shí)為其設(shè)置一個(gè)過期時(shí)間。當(dāng)用戶再次發(fā)起相同請(qǐng)求時(shí),就會(huì)從緩存中拿到一個(gè)空對(duì)象,用戶的請(qǐng)求被阻斷在了緩存層,從而保護(hù)了后端數(shù)據(jù)庫,但是這種做法也存在一些問題,雖然請(qǐng)求進(jìn)不了 MSQL,但是這種策略會(huì)占用 Redis 的緩存空間。

2) 布隆過濾器

我們知道,布隆過濾器判定不存在的數(shù)據(jù),那么該數(shù)據(jù)一定不存在,利用它的這一特點(diǎn)可以防止緩存穿透。

首先將用戶可能會(huì)訪問的熱點(diǎn)數(shù)據(jù)存儲(chǔ)在布隆過濾器中(也稱緩存預(yù)熱),當(dāng)有一個(gè)用戶請(qǐng)求到來時(shí)會(huì)先經(jīng)過布隆過濾器,如果請(qǐng)求的數(shù)據(jù),布隆過濾器中不存在,那么該請(qǐng)求將直接被拒絕,否則將繼續(xù)執(zhí)行查詢。相較于第一種方法,用布隆過濾器方法更為高效、實(shí)用。其流程示意圖如下:
 


圖2:緩存穿透問題解決

緩存預(yù)熱:是指系統(tǒng)啟動(dòng)時(shí),提前將相關(guān)的數(shù)據(jù)加載到 Redis 緩存系統(tǒng)中。這樣避免了用戶請(qǐng)求的時(shí)再去加載數(shù)據(jù)。

緩存擊穿

緩存擊穿是指用戶查詢的數(shù)據(jù)緩存中不存在,但是后端數(shù)據(jù)庫卻存在,這種現(xiàn)象出現(xiàn)原因是一般是由緩存中 key 過期導(dǎo)致的。比如一個(gè)熱點(diǎn)數(shù)據(jù) key,它無時(shí)無刻都在接受大量的并發(fā)訪問,如果某一時(shí)刻這個(gè) key 突然失效了,就致使大量的并發(fā)請(qǐng)求進(jìn)入后端數(shù)據(jù)庫,導(dǎo)致其壓力瞬間增大。這種現(xiàn)象被稱為緩存擊穿。

緩存擊穿有兩種解決方法:

1) 改變過期時(shí)間

設(shè)置熱點(diǎn)數(shù)據(jù)永不過期。

2) 分布式鎖

采用分布式鎖的方法,重新設(shè)計(jì)緩存的使用方式,過程如下:

  • 上鎖:當(dāng)我們通過 key 去查詢數(shù)據(jù)時(shí),首先查詢緩存,如果沒有,就通過分布式鎖進(jìn)行加鎖,第一個(gè)獲取鎖的進(jìn)程進(jìn)入后端數(shù)據(jù)庫查詢,并將查詢結(jié)果緩到Redis 中。
  • 解鎖:當(dāng)其他進(jìn)程發(fā)現(xiàn)鎖被某個(gè)進(jìn)程占用時(shí),就進(jìn)入等待狀態(tài),直至解鎖后,其余進(jìn)程再依次訪問被緩存的 key。

緩存雪崩

緩存雪崩是指緩存中大批量的 key 同時(shí)過期,而此時(shí)數(shù)據(jù)訪問量又非常大,從而導(dǎo)致后端數(shù)據(jù)庫壓力突然暴增,甚至?xí)斓?,這種現(xiàn)象被稱為緩存雪崩。它和緩存擊穿不同,緩存擊穿是在并發(fā)量特別大時(shí),某一個(gè)熱點(diǎn) key 突然過期,而緩存雪崩則是大量的 key 同時(shí)過期,因此它們根本不是一個(gè)量級(jí)。

?解決方案

緩存雪崩和緩存擊穿有相似之處,所以也可以采用熱點(diǎn)數(shù)據(jù)永不過期的方法,來減少大批量的 key 同時(shí)過期。再者就是為 key 設(shè)置隨機(jī)過期時(shí)間,避免 key 集中過期。


分享題目:Redis緩存問題(圖解:三種緩存問題)
URL鏈接:http://www.dlmjj.cn/article/cdhpieo.html