新聞中心
深度探索:Redis穿透的應(yīng)用場(chǎng)景

我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、肥西ssl等。為1000多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的肥西網(wǎng)站制作公司
Redis是一款內(nèi)存鍵值數(shù)據(jù)庫,被廣泛應(yīng)用于緩存、消息隊(duì)列、數(shù)據(jù)分析等領(lǐng)域。在應(yīng)用Redis的過程中,我們經(jīng)常會(huì)遇到一種問題,就是Redis穿透。本文將從Redis穿透的概念、原理入手,深入探討Redis穿透的應(yīng)用場(chǎng)景以及解決方案。
一、Redis穿透的概念及原理
Redis穿透是指請(qǐng)求緩存中不存在的數(shù)據(jù),導(dǎo)致緩存層無法響應(yīng)請(qǐng)求,進(jìn)而打到后端數(shù)據(jù)庫,造成數(shù)據(jù)庫壓力劇增,系統(tǒng)性能下降等問題。造成Redis穿透的原因有很多,比如惡意攻擊、緩存時(shí)間設(shè)置不合理、緩存擊穿等。
緩存穿透產(chǎn)生的原因是緩存找不到對(duì)應(yīng)的數(shù)據(jù),一旦這種情況出現(xiàn),請(qǐng)求就會(huì)直接打到后端數(shù)據(jù)庫,造成較大的數(shù)據(jù)庫壓力。在Redis中,穿透問題的表現(xiàn)為對(duì)一個(gè)不存在的KEY進(jìn)行查詢,這種查詢無法在緩存層完成,需要打到后端數(shù)據(jù)庫。
為了解決Redis穿透的問題,可以采用布隆過濾器、緩存擊穿技術(shù)等一系列方案,下文將側(cè)重討論穿透的應(yīng)用場(chǎng)景和解決方案。
二、Redis穿透的應(yīng)用場(chǎng)景
1.虛擬賬戶余額查詢
虛擬賬戶涉及到資金池的管理,因此查詢賬戶余額時(shí)需要驗(yàn)證用戶權(quán)限,同時(shí)還必須防止惡意攻擊。一旦有人使用一個(gè)不存在的賬戶查詢余額,就會(huì)造成Redis穿透。解決方案是在代碼層加鎖,通過布隆過濾器將有可能惡意攻擊的查詢進(jìn)行攔截。
2.文章評(píng)論查詢
在文章評(píng)論查詢過程中,如果用戶輸入文章不存在的ID,就會(huì)造成Redis穿透。針對(duì)這種情況,我們可以將不存在的文章ID預(yù)先設(shè)置為null,并設(shè)置一個(gè)短時(shí)緩存,防止短時(shí)間內(nèi)對(duì)這個(gè)不存在的文章ID進(jìn)行重復(fù)查詢。
3.商品信息查詢
在電商應(yīng)用場(chǎng)景中,我們常常遇到商品信息查詢的應(yīng)用場(chǎng)景。如果存在大量的惡意攻擊或者輸入錯(cuò)誤的請(qǐng)求,就會(huì)造成Redis穿透。解決方案之一是使用Redis的setnx命令,保證同一時(shí)間內(nèi)只有一個(gè)線程進(jìn)行商品信息查詢操作。
三、解決Redis穿透的方案
1.布隆過濾器
布隆過濾器是一種隨機(jī)數(shù)據(jù)結(jié)構(gòu),可以判斷一個(gè)元素是否在集合中。布隆過濾器將需要查詢的key映射到一個(gè)位數(shù)組中,并將這些位數(shù)全部初始化為0。當(dāng)進(jìn)行key的查詢時(shí),將key映射到位數(shù)組中,如果位數(shù)組全部為1則代表key可能存在,需要進(jìn)一步查詢。如果位數(shù)組中任意一個(gè)為0,則代表key不存在,直接緩存null并設(shè)置短時(shí)間緩存即可。
2.緩存空對(duì)象
對(duì)不存在的key進(jìn)行緩存空對(duì)象,避免大量的查詢請(qǐng)求打到后端數(shù)據(jù)庫中,同時(shí)為了避免這些空對(duì)象一直占用緩存空間而影響到正常業(yè)務(wù),可以設(shè)置空對(duì)象緩存過期時(shí)間,一般設(shè)置為1分鐘左右即可。
3.緩存穿透鎖
將一部分key緩存到redis中,當(dāng)執(zhí)行到redis沒有的key時(shí),會(huì)進(jìn)行加鎖查詢。當(dāng)查詢結(jié)果返回后,會(huì)將結(jié)果寫回到redis中。當(dāng)下次查詢r(jià)edis時(shí),發(fā)現(xiàn)redis中已經(jīng)存在該key,則直接返回其值。
四、總結(jié)
本文主要探討了Redis穿透的概念、原理以及應(yīng)用場(chǎng)景和相應(yīng)的解決方案。在應(yīng)用Redis時(shí),大家需要認(rèn)真考慮如何防止Redis穿透的問題,避免出現(xiàn)大量的數(shù)據(jù)庫查詢請(qǐng)求,從而提高系統(tǒng)的性能和穩(wěn)定性。需要注意的是,不同的應(yīng)用場(chǎng)景和業(yè)務(wù)需求需要采取不同的解決方案,靈活應(yīng)對(duì)才能更好的解決問題。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
名稱欄目:深度探索Redis穿透的應(yīng)用場(chǎng)景(redis穿透的場(chǎng)景)
當(dāng)前鏈接:http://m.fisionsoft.com.cn/article/cdjieoo.html


咨詢
建站咨詢
