最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

redis緩存穿透解決方法

 更新時(shí)間:2019年06月24日 17:16:01   投稿:laozhang  
在本篇文章里小編給大家分享了關(guān)于redis緩存穿透的解決方法以及相關(guān)實(shí)例內(nèi)容,需要的朋友們學(xué)習(xí)下。

緩存技術(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)目中的解決方案分享給大家,以供參考。

一、緩存穿透的原理

緩存的正常使用如圖:

20180507174845.png

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

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

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

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

20180507174951.png

如圖,緩存就像是數(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ī)避穿透的原因,如圖:

Redis避免緩存穿透的解決方案.png

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

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)存被惡意占滿。導(dǎo)致正常的功能不能緩存數(shù)據(jù)。

相關(guān)文章

  • 分布式使用Redis實(shí)現(xiàn)數(shù)據(jù)庫(kù)對(duì)象自增主鍵ID

    分布式使用Redis實(shí)現(xiàn)數(shù)據(jù)庫(kù)對(duì)象自增主鍵ID

    本文介紹在分布式項(xiàng)目中使用Redis生成對(duì)象的自增主鍵ID,通過(guò)Redis的INCR等命令實(shí)現(xiàn)計(jì)數(shù)器功能,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • Linux下安裝Redis 6.0.5的實(shí)現(xiàn)

    Linux下安裝Redis 6.0.5的實(shí)現(xiàn)

    本文詳細(xì)介紹了在Linux系統(tǒng)下安裝Redis 6.0.5的步驟,包括安裝準(zhǔn)備、編譯安裝、啟動(dòng)服務(wù)、設(shè)置密碼和配置文件修改等,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • 如何利用Redis作為Mybatis的二級(jí)緩存

    如何利用Redis作為Mybatis的二級(jí)緩存

    這篇文章主要介紹了如何利用Redis作為Mybatis的二級(jí)緩存,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • Redis位圖bitmap操作

    Redis位圖bitmap操作

    本文主要介紹了Redis位圖bitmap操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Redis IP地址的綁定的實(shí)現(xiàn)

    Redis IP地址的綁定的實(shí)現(xiàn)

    這篇文章主要介紹了Redis IP地址的綁定的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 動(dòng)態(tài)添加Redis密碼認(rèn)證的方法

    動(dòng)態(tài)添加Redis密碼認(rèn)證的方法

    本篇文章主要介紹了動(dòng)態(tài)添加Redis密碼認(rèn)證的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 使用Redis實(shí)現(xiàn)JWT令牌主動(dòng)失效機(jī)制

    使用Redis實(shí)現(xiàn)JWT令牌主動(dòng)失效機(jī)制

    JWT是一種輕量級(jí)的身份驗(yàn)證和授權(quán)機(jī)制,它是一種 JSON 格式的數(shù)據(jù)串,通常用于客戶端和服務(wù)端之間的單點(diǎn)登錄(Single Sign-On, SSO)場(chǎng)景,本文給大家介紹了如何使用Redis來(lái)實(shí)現(xiàn)JWT令牌主動(dòng)失效機(jī)制,需要的朋友可以參考下
    2024-08-08
  • Redis在windows環(huán)境下如何啟動(dòng)

    Redis在windows環(huán)境下如何啟動(dòng)

    這篇文章主要介紹了Redis在windows環(huán)境下如何啟動(dòng)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Redis實(shí)現(xiàn)多級(jí)緩存

    Redis實(shí)現(xiàn)多級(jí)緩存

    這篇文章主要為大家詳細(xì)介紹了Redis實(shí)現(xiàn)多級(jí)緩存,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • redis隊(duì)列和秒殺應(yīng)用方式

    redis隊(duì)列和秒殺應(yīng)用方式

    這篇文章主要介紹了redis隊(duì)列和秒殺應(yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04

最新評(píng)論

罗城| 清新县| 偃师市| 阿坝县| 黎川县| 阜新市| 紫金县| 黄陵县| 金寨县| 祁门县| 壶关县| 荣成市| 仙桃市| 静乐县| 临漳县| 阿巴嘎旗| 灵山县| 子洲县| 徐水县| 宁津县| 保康县| 宾阳县| 类乌齐县| 普定县| 桐庐县| 岳普湖县| 涿州市| 柯坪县| 新蔡县| 游戏| 贵港市| 扎兰屯市| 古田县| 环江| 湄潭县| 斗六市| 永登县| 兴文县| 井陉县| 富平县| 林芝县|