主頁 > 知識庫 > redis緩存穿透解決方法

redis緩存穿透解決方法

熱門標簽:b2b外呼系統(tǒng) 400電話辦理的口碑 地圖標注工廠入駐 南京手機外呼系統(tǒng)廠家 一個地圖標注多少錢 高碑店市地圖標注app 臺灣電銷 四川穩(wěn)定外呼系統(tǒng)軟件 廊坊外呼系統(tǒng)在哪買

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

一、緩存穿透的原理

緩存的正常使用如圖:

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

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

2、如果緩存中沒有數(shù)據(jù),就會訪問數(shù)據(jù)庫。

這里面就會存在一個BUG,如圖:

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

二、導致緩存穿透的原因

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

1、惡意攻擊,猜測你的key命名方式,然后估計使用一個你緩存中不會有的key進行訪問。

2、第一次數(shù)據(jù)訪問,這時緩存中還沒有數(shù)據(jù),則并發(fā)場景下,所有的請求都會壓到數(shù)據(jù)庫。

3、數(shù)據(jù)庫的數(shù)據(jù)也是空,這樣即使訪問了數(shù)據(jù)庫,也是獲取不到數(shù)據(jù),那么緩存中肯定也沒有對應的數(shù)據(jù)。這樣也會導致穿透。

三、解決緩存穿透

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

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

1、再web服務器啟動時,提前將有可能被頻繁并發(fā)訪問的數(shù)據(jù)寫入緩存?!@樣就規(guī)避大量的請求在第3步出現(xiàn)排隊阻塞。

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

3、Synchronized雙重檢測機制,這時我們就需要使用同步(Synchronized)機制,在同步代碼塊前查詢一下緩存是否存在對應的key,然后同步代碼塊里面再次查詢緩存里是否有要查詢的key。 這樣“雙重檢測”的目的,還是避免并發(fā)場景下導致的沒有意義的數(shù)據(jù)庫的訪問(也是一種嚴格避免穿透的方案)。

這一步會導致排隊,但是第一步中我們說過,為了避免大量的排隊,可以提前將可以預知的大量請求提前寫入緩存。

4、不管數(shù)據(jù)庫中是否有數(shù)據(jù),都在緩存中保存對應的key,值為空就行。–這樣是為了避免數(shù)據(jù)庫中沒有這個數(shù)據(jù),導致的平凡穿透緩存對數(shù)據(jù)庫進行訪問。

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

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

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

巨人網(wǎng)絡通訊聲明:本文標題《redis緩存穿透解決方法》,本文關鍵詞  redis,緩存,穿透,解決,方法,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《redis緩存穿透解決方法》相關的同類信息!
  • 本頁收集關于redis緩存穿透解決方法的相關信息資訊供網(wǎng)民參考!
  • 推薦文章