婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > redis緩存穿透解決方法

redis緩存穿透解決方法

熱門(mén)標(biāo)簽:b2b外呼系統(tǒng) 400電話(huà)辦理的口碑 地圖標(biāo)注工廠入駐 南京手機(jī)外呼系統(tǒng)廠家 一個(gè)地圖標(biāo)注多少錢(qián) 高碑店市地圖標(biāo)注app 臺(tái)灣電銷(xiāo) 四川穩(wěn)定外呼系統(tǒng)軟件 廊坊外呼系統(tǒng)在哪買(mǎi)

緩存技術(shù)可以用來(lái)減輕數(shù)據(jù)庫(kù)的壓力,提升訪問(wèn)效率。目前在企業(yè)項(xiàng)目中對(duì)緩存也是越來(lái)越重視。但是緩存不是說(shuō)隨隨便便加入項(xiàng)目就可以了。將緩存整合到項(xiàng)目中,這才是第一步。而緩存帶來(lái)的穿透問(wèn)題,進(jìn)而導(dǎo)致的雪蹦問(wèn)題都是我們迫切需要解決的問(wèn)題。本篇文章將我平時(shí)項(xiàng)目中的解決方案分享給大家,以供參考。

一、緩存穿透的原理

緩存的正常使用如圖:

如圖所示,緩存的使用流程:

1、先從緩存中取數(shù)據(jù),如果能取到,則直接返回?cái)?shù)據(jù)給用戶(hù)。這樣不用訪問(wèn)數(shù)據(jù)庫(kù),減輕數(shù)據(jù)庫(kù)的壓力。

2、如果緩存中沒(méi)有數(shù)據(jù),就會(huì)訪問(wèn)數(shù)據(jù)庫(kù)。

這里面就會(huì)存在一個(gè)BUG,如圖:

如圖,緩存就像是數(shù)據(jù)庫(kù)的一道防火墻,將請(qǐng)求比較頻繁的數(shù)據(jù)放到緩存中,從而減輕數(shù)據(jù)庫(kù)的壓力。 但是如果有人惡意攻擊,那就很輕松的穿透你的緩存,將所有的壓力都給數(shù)據(jù)庫(kù)。比如上圖,你緩存的key都是正整數(shù),但是我偏偏使用負(fù)數(shù)作為key訪問(wèn)你的緩存,這樣就會(huì)導(dǎo)致穿透緩存,將壓力直接給數(shù)據(jù)庫(kù)。

二、導(dǎo)致緩存穿透的原因

緩存穿透的問(wèn)題,肯定是再大并發(fā)情況下。依此為前提,我們分析緩存穿透的原因如下:

1、惡意攻擊,猜測(cè)你的key命名方式,然后估計(jì)使用一個(gè)你緩存中不會(huì)有的key進(jìn)行訪問(wèn)。

2、第一次數(shù)據(jù)訪問(wèn),這時(shí)緩存中還沒(méi)有數(shù)據(jù),則并發(fā)場(chǎng)景下,所有的請(qǐng)求都會(huì)壓到數(shù)據(jù)庫(kù)。

3、數(shù)據(jù)庫(kù)的數(shù)據(jù)也是空,這樣即使訪問(wèn)了數(shù)據(jù)庫(kù),也是獲取不到數(shù)據(jù),那么緩存中肯定也沒(méi)有對(duì)應(yīng)的數(shù)據(jù)。這樣也會(huì)導(dǎo)致穿透。

三、解決緩存穿透

緩存穿透在于一步步規(guī)避穿透的原因,如圖:

如上圖所示,解決的步驟如下:

1、再web服務(wù)器啟動(dòng)時(shí),提前將有可能被頻繁并發(fā)訪問(wèn)的數(shù)據(jù)寫(xiě)入緩存。—這樣就規(guī)避大量的請(qǐng)求在第3步出現(xiàn)排隊(duì)阻塞。

2、規(guī)范key的命名,并且統(tǒng)一緩存查詢(xún)和寫(xiě)入的入口。這樣,在入口處,對(duì)key的規(guī)范進(jìn)行檢測(cè)。–這樣保存惡意的key被攔截。

3、Synchronized雙重檢測(cè)機(jī)制,這時(shí)我們就需要使用同步(Synchronized)機(jī)制,在同步代碼塊前查詢(xún)一下緩存是否存在對(duì)應(yīng)的key,然后同步代碼塊里面再次查詢(xún)緩存里是否有要查詢(xún)的key。 這樣“雙重檢測(cè)”的目的,還是避免并發(fā)場(chǎng)景下導(dǎo)致的沒(méi)有意義的數(shù)據(jù)庫(kù)的訪問(wèn)(也是一種嚴(yán)格避免穿透的方案)。

這一步會(huì)導(dǎo)致排隊(duì),但是第一步中我們說(shuō)過(guò),為了避免大量的排隊(duì),可以提前將可以預(yù)知的大量請(qǐng)求提前寫(xiě)入緩存。

4、不管數(shù)據(jù)庫(kù)中是否有數(shù)據(jù),都在緩存中保存對(duì)應(yīng)的key,值為空就行。–這樣是為了避免數(shù)據(jù)庫(kù)中沒(méi)有這個(gè)數(shù)據(jù),導(dǎo)致的平凡穿透緩存對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)。

5、第4步中的空值如果太多,也會(huì)導(dǎo)致內(nèi)存耗盡。導(dǎo)致不必要的內(nèi)存消耗。這樣就要定期的清理空值的key。避免內(nèi)存被惡意占滿(mǎn)。導(dǎo)致正常的功能不能緩存數(shù)據(jù)。

您可能感興趣的文章:
  • SpringBoot2整合Redis緩存三步驟代碼詳解
  • mybatis plus使用redis作為二級(jí)緩存的方法
  • window手動(dòng)操作清理redis緩存的技巧總結(jié)
  • 提高redis緩存命中率的方法
  • 如何在 Java 中實(shí)現(xiàn)一個(gè) redis 緩存服務(wù)
  • 淺談Spring Boot中Redis緩存還能這么用
  • 在Java中使用redisTemplate操作緩存的方法示例
  • spring boot+spring cache實(shí)現(xiàn)兩級(jí)緩存(redis+caffeine)
  • Redis緩存穿透出現(xiàn)原因及解決方案

標(biāo)簽:定州 河源 泰州 畢節(jié) 南寧 甘南 拉薩 伊春

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《redis緩存穿透解決方法》,本文關(guān)鍵詞  redis,緩存,穿透,解決,方法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《redis緩存穿透解決方法》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于redis緩存穿透解決方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 石河子市| 得荣县| 玉屏| 衡南县| 宝坻区| 沙雅县| 日喀则市| 德阳市| 公主岭市| 扎鲁特旗| 奉贤区| 游戏| 盐池县| 固安县| 武山县| 随州市| 简阳市| 岫岩| 滦南县| 时尚| 黑河市| 灵寿县| 大余县| 铜梁县| 鸡泽县| 称多县| 凤凰县| 报价| 安乡县| 华池县| 金川县| 晋江市| 和平县| 营山县| 聂拉木县| 襄城县| 通山县| 永泰县| 中方县| 云林县| 资中县|