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

關(guān)于Redis的緩存穿透問題

 更新時間:2023年08月16日 08:30:08   作者:程序員阿紅  
這篇文章主要介紹了關(guān)于Redis的緩存穿透問題,緩存穿透是指客戶端請求的數(shù)據(jù)在緩存中和數(shù)據(jù)庫中都不存在,這樣緩存永遠(yuǎn)不會生效,這些請求都會打到數(shù)據(jù)庫,需要的朋友可以參考下

1. 緩存穿透的理解

緩存穿透是指客戶端請求的數(shù)據(jù)在緩存中和數(shù)據(jù)庫中都不存在,這樣緩存永遠(yuǎn)不會生效,這些請求都會打到數(shù)據(jù)庫。

2. 常見的解決方案有兩種:

  • 1.緩存空對象
    • 優(yōu)點:實現(xiàn)簡單,維護(hù)方便
    • 缺點:
      • 額外的內(nèi)存消耗
      • 可能造成短期的不一致
  • 2.布隆過濾
    • 優(yōu)點:內(nèi)存占用較少,沒有多余key
    • 缺點:
      • 實現(xiàn)復(fù)雜
      • 存在誤判可能

**緩存空對象思路分析:**當(dāng)我們客戶端訪問不存在的數(shù)據(jù)時,先請求redis,但是此時redis中沒有數(shù)據(jù),此時會訪問到數(shù)據(jù)庫,但是數(shù)據(jù)庫中也沒有數(shù)據(jù),這個數(shù)據(jù)穿透了緩存,直擊數(shù)據(jù)庫,我們都知道數(shù)據(jù)庫能夠承載的并發(fā)不如redis這么高,如果大量的請求同時過來訪問這種不存在的數(shù)據(jù),這些請求就都會訪問到數(shù)據(jù)庫,簡單的解決方案就是哪怕這個數(shù)據(jù)在數(shù)據(jù)庫中也不存在,我們也把這個數(shù)據(jù)存入到redis中去,這樣,下次用戶過來訪問這個不存在的數(shù)據(jù),那么在redis中也能找到這個數(shù)據(jù)就不會進(jìn)入到緩存了

3. 布隆過濾:

布隆過濾器其實采用的是哈希思想來解決這個問題,通過一個龐大的二進(jìn)制數(shù)組,走哈希思想去判斷當(dāng)前這個要查詢的這個數(shù)據(jù)是否存在,如果布隆過濾器判斷存在,則放行,這個請求會去訪問redis,哪怕此時redis中的數(shù)據(jù)過期了,但是數(shù)據(jù)庫中一定存在這個數(shù)據(jù),在數(shù)據(jù)庫中查詢出來這個數(shù)據(jù)后,再將其放入到redis中,

假設(shè)布隆過濾器判斷這個數(shù)據(jù)不存在,則直接返回

這種方式優(yōu)點在于節(jié)約內(nèi)存空間,存在誤判,誤判原因在于:布隆過濾器走的是哈希思想,只要哈希思想,就可能存在哈希沖突

image-20221209213419848

4. 編碼解決查詢的緩存穿透問題:

核心思路如下:

在原來的邏輯中,我們?nèi)绻l(fā)現(xiàn)這個數(shù)據(jù)在mysql中不存在,直接就返回404了,這樣是會存在緩存穿透問題的

現(xiàn)在的邏輯中:如果這個數(shù)據(jù)不存在,我們不會返回404 ,還是會把這個數(shù)據(jù)寫入到Redis中,并且將value設(shè)置為空,當(dāng)再次發(fā)起查詢時,我們?nèi)绻l(fā)現(xiàn)命中之后,判斷這個value是否是null,如果是null,則是之前寫入的數(shù)據(jù),證明是緩存穿透數(shù)據(jù),如果不是,則直接返回數(shù)據(jù)。

1653327124561

小總結(jié):

緩存穿透產(chǎn)生的原因是什么?

  • 用戶請求的數(shù)據(jù)在緩存中和數(shù)據(jù)庫中都不存在,不斷發(fā)起這樣的請求,給數(shù)據(jù)庫帶來巨大壓力

緩存穿透的解決方案有哪些?

  • 緩存null值
  • 布隆過濾
  • 增強id的復(fù)雜度,避免被猜測id規(guī)律
  • 做好數(shù)據(jù)的基礎(chǔ)格式校驗
  • 加強用戶權(quán)限校驗
  • 做好熱點參數(shù)的限流

相關(guān)文章

  • java socket長連接中解決read阻塞的3個辦法

    java socket長連接中解決read阻塞的3個辦法

    這篇文章主要介紹了java socket長連接中解決read阻塞的3個辦法,本文取了折中的一個方法,并給出代碼實例,需要的朋友可以參考下
    2014-08-08
  • Java?嵌入數(shù)據(jù)引擎從?SQLite?到?SPL詳解

    Java?嵌入數(shù)據(jù)引擎從?SQLite?到?SPL詳解

    這篇文章主要介紹了Java?嵌入數(shù)據(jù)引擎:從?SQLite?到?SPL,SQLite架構(gòu)簡單,其核心雖然是C語言開發(fā)的,但封裝得比較好,對外呈現(xiàn)為一個小巧的Jar包,能方便地集成在Java應(yīng)用中,本文給大家介紹的非常詳細(xì),需要的朋友參考下
    2022-07-07
  • Java全排列算法字典序下的下一個排列講解

    Java全排列算法字典序下的下一個排列講解

    今天小編就為大家分享一篇關(guān)于Java全排列字典序下的下一個排列,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Java高并發(fā)中的交換器Exchanger解析

    Java高并發(fā)中的交換器Exchanger解析

    這篇文章主要介紹了Java高并發(fā)中的交換器Exchanger解析,如果兩個線程并行處理,但在某個時刻需要互相交換自己已經(jīng)處理完的中間數(shù)據(jù),然后才能繼續(xù)往下執(zhí)行,這個時候就可以使用 Exchanger,需要的朋友可以參考下
    2023-12-12
  • Java interceptor攔截器的方法

    Java interceptor攔截器的方法

    java里的攔截器是動態(tài)攔截Action調(diào)用的對象,它提供了一種機制可使開發(fā)者在一個Action執(zhí)行的先后執(zhí)行一段代碼,也能夠在一個Action,接下來通過本文給大家介紹Java interceptor攔截器的方法,感興趣的朋友一起看看吧
    2022-01-01
  • java偽泛型知識點詳解

    java偽泛型知識點詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于java偽泛型知識點詳解內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)參考下。
    2021-06-06
  • 淺談java多態(tài)的實現(xiàn)主要體現(xiàn)在哪些方面

    淺談java多態(tài)的實現(xiàn)主要體現(xiàn)在哪些方面

    下面小編就為大家?guī)硪黄獪\談java多態(tài)的實現(xiàn)主要體現(xiàn)在哪些方面。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • JAVA 內(nèi)存溢出案例匯總

    JAVA 內(nèi)存溢出案例匯總

    這篇文章主要介紹了JAVA 內(nèi)存溢出案例的匯總,文中講解非常細(xì)致,幫助各位工作學(xué)習(xí)時避免內(nèi)存溢出,感興趣的朋友可以了解下
    2020-07-07
  • SpringBoot接受前臺參數(shù)的6種方式以及統(tǒng)一響應(yīng)代碼示例

    SpringBoot接受前臺參數(shù)的6種方式以及統(tǒng)一響應(yīng)代碼示例

    這篇文章主要給大家介紹了關(guān)于SpringBoot接受前臺參數(shù)的6種方式以及統(tǒng)一響應(yīng)的相關(guān)資料,前端負(fù)責(zé)展示頁面和用戶交互,而后端則負(fù)責(zé)處理業(yè)務(wù)邏輯和數(shù)據(jù)存儲,在這種架構(gòu)下前端需要將用戶輸入的數(shù)據(jù)發(fā)送給后端進(jìn)行處理,需要的朋友可以參考下
    2023-12-12
  • FeignClient設(shè)置動態(tài)url方式

    FeignClient設(shè)置動態(tài)url方式

    文章介紹了如何在Spring Cloud環(huán)境下使用FeignClient實現(xiàn)負(fù)載均衡,通過配置Nacos和FeignClient屬性,可以實現(xiàn)服務(wù)間的負(fù)載均衡調(diào)用
    2024-11-11

最新評論

南木林县| 祁连县| 兴化市| 平邑县| 南京市| 乐东| 扬中市| 宜兰市| 满洲里市| 永胜县| 灵寿县| 东方市| 平乡县| 运城市| 巴林左旗| 三穗县| 建宁县| 右玉县| 锦州市| 普定县| 江陵县| 鲁甸县| 垣曲县| 新沂市| 岢岚县| 黎川县| 天等县| 阿合奇县| 措美县| 出国| 佛坪县| 绩溪县| 濉溪县| 巴青县| 喀喇| 红原县| 巴楚县| 久治县| 攀枝花市| 贺兰县| 闸北区|