国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

緩存擊穿、穿透、雪崩及常用解決方案

這篇具有很好參考價(jià)值的文章主要介紹了緩存擊穿、穿透、雪崩及常用解決方案。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

緩存擊穿、穿透、雪崩及解決方案

Redis是一種高性能的鍵值型數(shù)據(jù)庫,它可以用來實(shí)現(xiàn)緩存功能,提高應(yīng)用的響應(yīng)速度和承載能力。但是,使用Redis緩存也會(huì)遇到一些常見的問題,比如緩存擊穿、緩存穿透、緩存雪崩。這些問題都會(huì)影響緩存的效率和穩(wěn)定性,所以需要了解它們的原因和解決方案,保障Redis能夠正常運(yùn)行。

擊穿、穿透、雪崩的意思

擊穿、穿透、雪崩這三個(gè)詞語很容易混淆,本文先對(duì)詞語進(jìn)行理解,再講解技術(shù)

擊穿:擊穿拆開后,是擊和穿。擊意為敲打,或做類似敲打的動(dòng)作穿意為穿透

擊是什么?如下圖,攻擊的意思

緩存擊穿、穿透、雪崩及常用解決方案

穿是什么?如下圖,穿透,造成的效果就是個(gè)

緩存擊穿、穿透、雪崩及常用解決方案

雪崩的意思很簡單,就是一個(gè)字,如下圖

緩存擊穿、穿透、雪崩及常用解決方案

白話講解一下,擊穿就是先擊后穿;穿透就是穿透,有個(gè)洞;雪崩就是多,很多很多

再從技術(shù)角度說明擊穿、穿透、雪崩

緩存擊穿、穿透、雪崩及常用解決方案

擊穿意為先擊后穿。熱點(diǎn)數(shù)據(jù)存在,且能夠擊中。但是由于熱點(diǎn)數(shù)據(jù)失效從而訪問數(shù)據(jù)庫

穿透意為直接穿。由于訪問不存在的數(shù)據(jù),從而直接訪問數(shù)據(jù)庫

雪崩意為多,大量。大量緩存同時(shí)失效,從而直接訪問數(shù)據(jù)庫

緩存擊穿

緩存擊穿的定義:某個(gè)熱點(diǎn)數(shù)據(jù)在緩存中過期或失效時(shí),大量的請(qǐng)求同時(shí)訪問該數(shù)據(jù),導(dǎo)致數(shù)據(jù)庫壓力過大甚至崩潰的現(xiàn)象。通常會(huì)發(fā)生在數(shù)據(jù)更新頻率較高或者緩存設(shè)置了相同的過期時(shí)間的時(shí)候。

實(shí)際上可以這么理解:應(yīng)該有的數(shù)據(jù)但是沒讀到,從而擊穿了緩存,直接訪問數(shù)據(jù)庫

可采取的方案:

  • 不設(shè)置過期時(shí)間或設(shè)置較長的過期時(shí)間:這樣可以避免熱點(diǎn)數(shù)據(jù)同時(shí)失效,但是也會(huì)增加內(nèi)存占用和數(shù)據(jù)不一致的風(fēng)險(xiǎn)
  • 定時(shí)更新。比如這個(gè)熱點(diǎn)數(shù)據(jù)的過期時(shí)間是 2 小時(shí),那么每到 1小時(shí)50 分鐘時(shí),通過定時(shí)任務(wù)去更新這個(gè)熱點(diǎn) key,并重新設(shè)置其過期時(shí)間
  • 互斥鎖:當(dāng)緩存中沒有數(shù)據(jù)時(shí),只允許一個(gè)線程去數(shù)據(jù)庫查詢并更新緩存,其他線程等待該線程完成后再從緩存中獲取數(shù)據(jù)。這樣可以減少對(duì)數(shù)據(jù)庫的并發(fā)訪問,但是也會(huì)降低系統(tǒng)的吞吐量和響應(yīng)速度
  • 分布式鎖:當(dāng)多個(gè)Redis節(jié)點(diǎn)存在時(shí),可以使用分布式鎖來保證只有一個(gè)節(jié)點(diǎn)去數(shù)據(jù)庫查詢并更新緩存,其他節(jié)點(diǎn)等待該節(jié)點(diǎn)完成后再從緩存中獲取數(shù)據(jù)。這樣可以避免多個(gè)Redis節(jié)點(diǎn)同時(shí)訪問數(shù)據(jù)庫,但是也會(huì)增加系統(tǒng)的復(fù)雜度和延遲

緩存穿透

緩存穿透的定義:

用戶查詢一個(gè)不存在的數(shù)據(jù),導(dǎo)致緩存中沒有該數(shù)據(jù),每次都要去數(shù)據(jù)庫查詢,而數(shù)據(jù)庫中也沒有該數(shù)據(jù),造成無效的查詢和資源浪費(fèi)的現(xiàn)象。通常會(huì)發(fā)生在用戶惡意攻擊或者參數(shù)校驗(yàn)不嚴(yán)格的時(shí)候

實(shí)際上可以這么理解:不應(yīng)該有的數(shù)據(jù)非要讀,從而穿透了緩存,直接訪問數(shù)據(jù)庫

可采取的方案:

  • 業(yè)務(wù)層校驗(yàn)。用戶發(fā)過來的請(qǐng)求,根據(jù)請(qǐng)求參數(shù)進(jìn)行校驗(yàn),對(duì)于明顯錯(cuò)誤的參數(shù),直接攔截返回。比如請(qǐng)求參數(shù)為主鍵自增 id ,那么對(duì)于請(qǐng)求小于 0 的 id 參數(shù), 明顯不符合業(yè)務(wù)邏輯。
  • 緩存空值:當(dāng)數(shù)據(jù)庫中沒有查詢到數(shù)據(jù)時(shí),仍然將空值或者默認(rèn)值寫入緩存,并設(shè)置一個(gè)較短的過期時(shí)間。這樣可以減少對(duì)數(shù)據(jù)庫的訪問次數(shù),但也會(huì)占用一定的內(nèi)存
  • 使用布隆過濾器:布隆過濾器是一種概率型的數(shù)據(jù)結(jié)構(gòu),它可以判斷一個(gè)元素是否可能存在于一個(gè)集合中??梢詫⑺锌赡艽嬖诘臄?shù)據(jù)的鍵值哈希到一個(gè)足夠大的位圖中,當(dāng)用戶查詢一個(gè)數(shù)據(jù)時(shí),先用布隆過濾器判斷該鍵值是否可能存在,如果不存在則直接返回,如果存在則再去緩存和數(shù)據(jù)庫中查詢。這樣可以有效地?cái)r截不存在的數(shù)據(jù)請(qǐng)求,但是也會(huì)有一定的誤判率和內(nèi)存開銷

緩存雪崩

緩存雪崩的定義:在某個(gè)時(shí)間點(diǎn),大量的緩存數(shù)據(jù)同時(shí)失效或者緩存服務(wù)器宕機(jī),導(dǎo)致所有的請(qǐng)求都要去數(shù)據(jù)庫查詢,造成數(shù)據(jù)庫壓力過大甚至崩潰的現(xiàn)象。這種情況通常發(fā)生在緩存設(shè)置了相同或者相近的過期時(shí)間或者緩存服務(wù)器遭遇意外故障的場景下。

實(shí)際上可以這么理解:大量數(shù)據(jù)讀取,從而使緩存雪崩,直接訪問數(shù)據(jù)庫

為了防止緩存雪崩,可以采用以下幾種方法:

  • 設(shè)置不同的過期時(shí)間??梢越o緩存設(shè)置不同或者隨機(jī)的過期時(shí)間,避免大量的緩存同時(shí)失效,造成數(shù)據(jù)庫壓力突增
  • 緩存預(yù)熱:對(duì)于即將來臨的大量請(qǐng)求,可以將數(shù)據(jù)提前緩存在Redis中,并設(shè)置不同的過期時(shí)間
  • 使用多級(jí)緩存:可以構(gòu)建多級(jí)緩存架構(gòu),比如Nginx緩存+Redis緩存+本地緩存等,當(dāng)某一級(jí)緩存出現(xiàn)問題時(shí),可以從其他級(jí)別的緩存中獲取數(shù)據(jù),增加系統(tǒng)的容錯(cuò)能力
  • 使用限流熔斷:可以利用一些限流和熔斷組件,對(duì)請(qǐng)求進(jìn)行限流和降級(jí)處理,當(dāng)請(qǐng)求超過系統(tǒng)能承受的閥值時(shí),直接拒絕或者返回默認(rèn)值,保護(hù)數(shù)據(jù)庫不被打垮
  • 使用集群和負(fù)載均衡:可以將Redis部署成集群模式,并使用負(fù)載均衡組件,比如LVS、HAProxy等,對(duì)請(qǐng)求進(jìn)行分發(fā)和轉(zhuǎn)發(fā),提高Redis的可用性和并發(fā)能力

總結(jié)

本文介紹了緩存擊穿、緩存穿透和緩存雪崩三種問題及解決方案。通過本文,可以了解到:文章來源地址http://www.zghlxwxcb.cn/news/detail-464315.html

  • 緩存擊穿:先擊后穿
  • 緩存擊穿的解決方案有:設(shè)置熱點(diǎn)數(shù)據(jù)永不過期、定時(shí)更新、分布式
  • 緩存穿透:將緩存穿了個(gè)洞
  • 緩存穿透的解決方案有:業(yè)務(wù)層校驗(yàn)、緩存空值、布隆過濾器
  • 緩存雪崩:大量失效Key
  • 緩存雪崩的解決方案有:設(shè)置不同的過期時(shí)間、緩存預(yù)熱、多級(jí)緩存、限流熔斷、集群和負(fù)載均衡

到了這里,關(guān)于緩存擊穿、穿透、雪崩及常用解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • redis中緩存雪崩,緩存穿透,緩存擊穿的原因以及解決方案

    redis中緩存雪崩,緩存穿透,緩存擊穿的原因以及解決方案

    在redis中,新,舊數(shù)據(jù)交替時(shí)候,舊數(shù)據(jù)進(jìn)行了刪除,新數(shù)據(jù)沒有更新過來,造成在高并發(fā)環(huán)境下,大量請(qǐng)求查詢r(jià)edis沒有數(shù)據(jù),直接查詢mysql,造成mysql的壓力驟增,給mysql造成極大的壓力,造成一連串的后續(xù)異常反應(yīng)。 1.大多數(shù)系統(tǒng)設(shè)計(jì)者 考慮用加鎖 (最多的解決方案)或

    2024年02月15日
    瀏覽(37)
  • redis實(shí)戰(zhàn)-緩存三劍客穿透擊穿雪崩解決方案

    redis實(shí)戰(zhàn)-緩存三劍客穿透擊穿雪崩解決方案

    緩存穿透 :緩存穿透是指客戶端請(qǐng)求的 數(shù)據(jù)在緩存中和數(shù)據(jù)庫中都不存在 ,這樣緩存永遠(yuǎn)不會(huì)生效,這些請(qǐng)求都會(huì)打到數(shù)據(jù)庫, 造成數(shù)據(jù)庫壓力 ,也讓緩存沒有發(fā)揮出應(yīng)有的作用 緩存空對(duì)象 當(dāng)我們客戶端訪問不存在的數(shù)據(jù)時(shí),先請(qǐng)求redis,但是此時(shí)redis中沒有數(shù)據(jù),此時(shí)

    2024年02月11日
    瀏覽(29)
  • Redis中的緩存穿透、雪崩、擊穿的原因以及解決方案

    Redis中的緩存穿透、雪崩、擊穿的原因以及解決方案

    是指用戶查詢數(shù)據(jù),在數(shù)據(jù)庫沒有,自然在緩存中也不會(huì)有。這樣就導(dǎo)致用戶查詢的時(shí)候,在緩存中找不到,每次都要去數(shù)據(jù)庫再查詢一遍,然后返回空(相當(dāng)于進(jìn)行了兩次無用的查詢)。這樣請(qǐng)求就繞過緩存直接查數(shù)據(jù)庫,這也是經(jīng)常提的緩存命中率問題。 我們可以簡單的

    2024年02月12日
    瀏覽(21)
  • 【Redis從入門到進(jìn)階】第 6 講:緩存雪崩、擊穿、穿透場景與解決方案

    【Redis從入門到進(jìn)階】第 6 講:緩存雪崩、擊穿、穿透場景與解決方案

    本文已收錄于專欄 ??《Redis從入門到進(jìn)階》?? ?? 本專欄開啟,目的在于幫助大家更好的掌握學(xué)習(xí) Redis ,同時(shí)也是為了記錄我自己學(xué)習(xí) Redis 的過程,將會(huì)從基礎(chǔ)的數(shù)據(jù)類型開始記錄,直到一些更多的應(yīng)用,如緩存擊穿還有分布式鎖以及 Redis 持久化等。希望大家有問題也可

    2023年04月12日
    瀏覽(233)
  • Redis緩存雪崩、穿透、擊穿原因分析和解決方案,附Redis管道使用技巧

    Redis緩存雪崩、穿透、擊穿原因分析和解決方案,附Redis管道使用技巧

    先給大家附上其他幾篇文章,感興趣的自行開車導(dǎo)航 Redis過期策略和持久化機(jī)制全面揭秘,教你如何合理配置 【深入淺出Redis 一】從版本特性到數(shù)據(jù)類型到線程模型,帶你了解Redis的核心特性和應(yīng)用場景! 一次redis OOM問題分析解決,rdbtools安裝分析redis內(nèi)存 Redis管道(pipelin

    2024年02月16日
    瀏覽(23)
  • 探討Redis緩存問題及解決方案:緩存穿透、緩存擊穿、緩存雪崩與緩存預(yù)熱(如何解決Redis緩存中的常見問題并提高應(yīng)用性能)

    探討Redis緩存問題及解決方案:緩存穿透、緩存擊穿、緩存雪崩與緩存預(yù)熱(如何解決Redis緩存中的常見問題并提高應(yīng)用性能)

    Redis是一種非常流行的開源緩存系統(tǒng),用于緩存數(shù)據(jù)以提高應(yīng)用程序性能。但是,如果我們不注意一些緩存問題,Redis也可能會(huì)導(dǎo)致一些性能問題。在本文中,我們將探討Redis中的一些常見緩存問題,并提供解決方案。 緩存穿透指的是當(dāng)一個(gè)請(qǐng)求嘗試訪問一個(gè)不存在于緩存中的

    2024年02月03日
    瀏覽(169)
  • redis的緩存穿透,緩存并發(fā),緩存雪崩,緩存問題及解決方案

    redis的緩存穿透,緩存并發(fā),緩存雪崩,緩存問題及解決方案

    緩存穿透 問題原因 解決方案 緩存并發(fā) 緩存雪崩 緩存失效時(shí)間設(shè)置一致導(dǎo)致的。 解決方案: 1)方案一 2)方案二 如何設(shè)計(jì)一個(gè)緩存策略,緩存熱點(diǎn)數(shù)據(jù)?

    2024年02月21日
    瀏覽(28)
  • 緩存雪崩、緩存擊穿、緩存穿透原因及解決辦法

    緩存雪崩是指在緩存中的大量數(shù)據(jù)在同一個(gè)時(shí)刻全部過期,導(dǎo)致原本這些可以由緩存中間件處理的高并發(fā)請(qǐng)求,一下子全部打到數(shù)據(jù)庫,導(dǎo)致數(shù)據(jù)庫服務(wù)器崩潰的一種現(xiàn)象。那么出現(xiàn)緩存雪崩的原因可以有①:緩存中間件宕機(jī)。②:緩存中大部分key都設(shè)置了相同的時(shí)間,導(dǎo)致

    2024年02月08日
    瀏覽(90)
  • Redis 如何解決緩存雪崩、緩存擊穿、緩存穿透難題

    Redis 如何解決緩存雪崩、緩存擊穿、緩存穿透難題

    Redis?作為一門熱門的緩存技術(shù),引入了緩存層,就會(huì)有緩存異常的三個(gè)問題,分別是緩存擊穿、緩存穿透、緩存雪崩。我們用本篇文章來講解下如何解決! 緩存擊穿 : 指的是緩存中的某個(gè)熱點(diǎn)數(shù)據(jù)過期了,但是此時(shí)大量的并發(fā)請(qǐng)求訪問這個(gè)key的值,此時(shí)因?yàn)榫彺孢^期無法從

    2024年02月14日
    瀏覽(21)
  • [Redis]緩存穿透、緩存擊穿、緩存雪崩問題及解決方法

    緩存穿透就是指在高并發(fā)的情況下大量的請(qǐng)求去查詢一個(gè)不存在于緩存中的數(shù)據(jù),導(dǎo)致這些請(qǐng)求都直接訪問數(shù)據(jù)庫,給數(shù)據(jù)庫造成壓力。例如:我存儲(chǔ)在緩存中的key是數(shù)字類型(123),但是網(wǎng)絡(luò)攻擊者頻繁地用字符串(abc)去獲取緩存。導(dǎo)致永遠(yuǎn)都無法命中緩存,請(qǐng)求最終都

    2024年02月15日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包