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

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

這篇具有很好參考價值的文章主要介紹了Redis 如何解決緩存雪崩、緩存擊穿、緩存穿透難題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

Redis?作為一門熱門的緩存技術(shù),引入了緩存層,就會有緩存異常的三個問題,分別是緩存擊穿、緩存穿透、緩存雪崩。我們用本篇文章來講解下如何解決!

緩存擊穿

緩存擊穿: 指的是緩存中的某個熱點數(shù)據(jù)過期了,但是此時大量的并發(fā)請求訪問這個key的值,此時因為緩存過期無法從緩存中獲取,直接訪問數(shù)據(jù)庫,數(shù)據(jù)庫很容易就會被這些高并發(fā)的請求沖垮,這就是緩存擊穿。

解決方案

  1. 熱點數(shù)據(jù)不要設(shè)置過期時間,或者在熱點數(shù)據(jù)即將要過期前,提前通過后臺線程更新緩存以及重新設(shè)置過期時間;
  2. 互斥鎖方案,如果該key的數(shù)據(jù)更新了,那么就通過互斥鎖的方式將其更新。

緩存穿透

緩存穿透:假如用戶訪問的數(shù)據(jù),既不在緩存中,也不在數(shù)據(jù)庫。于是請求在訪問緩存時,發(fā)現(xiàn)緩存沒有命中,繼續(xù)訪問數(shù)據(jù)庫,發(fā)現(xiàn)數(shù)據(jù)庫中也沒有對應(yīng)的key值。當(dāng)有大量這樣的并發(fā)請求到來時,數(shù)據(jù)庫的壓力激增,這就是緩存穿透。

Redis 如何解決緩存雪崩、緩存擊穿、緩存穿透難題,redis,緩存,redis,數(shù)據(jù)庫

?如上圖紅框所示,一般緩存穿透是遭遇了惡意請求,或者業(yè)務(wù)誤刪緩存跟數(shù)據(jù)庫,導(dǎo)致緩存和數(shù)據(jù)庫中都沒有數(shù)據(jù)。

應(yīng)對緩存穿透,一般是下面兩種方案。

1. 緩存空值或者默認(rèn)值

出現(xiàn)緩存穿透的現(xiàn)象時,我們可以針對查詢的數(shù)據(jù),在緩存中設(shè)置一個空值或者默認(rèn)值,這樣后續(xù)請求就可以從緩存中讀取到空值或者默認(rèn)值,從而不會繼續(xù)查詢數(shù)據(jù)庫。

?2. 使用布隆過濾器(推薦)

布隆過濾器是一種數(shù)據(jù)結(jié)構(gòu),更準(zhǔn)確的說是一種概率型的數(shù)據(jù)結(jié)構(gòu),因為它能判斷某個元素一定不存在或者是可能存在。

在寫入數(shù)據(jù)庫數(shù)據(jù)時,使用布隆過濾器做個標(biāo)記,然后在用戶請求到來時,業(yè)務(wù)線程確認(rèn)緩存失效后,可以通過查詢布隆過濾器快速判斷數(shù)據(jù)是否存在,如果不存在,就不用通過查詢數(shù)據(jù)庫來判斷數(shù)據(jù)是否存在。

緩存雪崩

通常為了保證緩存中的數(shù)據(jù)與數(shù)據(jù)庫中的數(shù)據(jù)一致性,我們會給 Redis 里的數(shù)據(jù)設(shè)置過期時間,當(dāng)緩存數(shù)據(jù)過期后,用戶訪問的數(shù)據(jù)無法命中緩存,業(yè)務(wù)系統(tǒng)需要重新生成緩存,因此就會訪問數(shù)據(jù)庫,并將數(shù)據(jù)更新到 Redis 里。

緩存雪崩: 就是指在大量的應(yīng)用請求無法在 Redis 緩存中進行處理,然后應(yīng)用將大量請求發(fā)送到數(shù)據(jù)庫層,導(dǎo)致數(shù)據(jù)庫層的壓力驟增。
一般是以下兩種情況導(dǎo)致的:

緩存中的大量數(shù)據(jù)在同一時間過期,導(dǎo)致大量請求無法得到處理。
Redis 緩存實例發(fā)生故障宕機了,無法處理請求,導(dǎo)致大量請求一下子積壓到數(shù)據(jù)庫層面

大量數(shù)據(jù)同時過期

解決方案
過期時間添加隨機數(shù)
首先,我們要避免給大量的數(shù)據(jù)設(shè)置相同的過期時間。如果業(yè)務(wù)真的有這個需求,我們可以在用 EXPIRE 命令給每個數(shù)據(jù)設(shè)置過期時間時,給這些數(shù)據(jù)的過期時間增加一個較小的隨機數(shù),既能避免了大量數(shù)據(jù)同時過期,又保證了這些數(shù)據(jù)基本在相近的時間失效,依然能滿足業(yè)務(wù)需求。

互斥鎖
當(dāng)業(yè)務(wù)線程在處理用戶請求時,如果發(fā)現(xiàn)訪問的數(shù)據(jù)不在 Redis 里,就加個互斥鎖,保證同一時間內(nèi)只有一個請求來構(gòu)建緩存,當(dāng)緩存構(gòu)建完畢后,再釋放鎖。未能獲取互斥鎖的請求,要么等待鎖釋放后重新讀取緩存,要么就返回空值或者默認(rèn)值。

Redis 故障宕機

解決方案:

  • 服務(wù)熔斷或請求限流

發(fā)生緩存雪崩時,為了防止引發(fā)連鎖的數(shù)據(jù)庫雪崩,甚至是整個系統(tǒng)的崩潰,我們暫停業(yè)務(wù)應(yīng)用對緩存系統(tǒng)的接口訪問。具體點說,就是業(yè)務(wù)應(yīng)用調(diào)用緩存接口時,緩存客戶端并不把請求發(fā)給 Redis 緩存實例,而是直接返回,等到 Redis 緩存實例重新恢復(fù)服務(wù)后,再允許應(yīng)用請求發(fā)送到緩存系統(tǒng)。
為了減少對業(yè)務(wù)的影響,我們可以啟用請求限流機制,只將少部分請求發(fā)送到數(shù)據(jù)庫進行處理,再多的請求就在入口直接拒絕服務(wù),等到 Redis 恢復(fù)正常并把緩存預(yù)熱完后,再解除請求限流的機制。

  • 構(gòu)建 Redis 緩存高可靠集群

如果 Redis 緩存的主節(jié)點故障宕機了,從節(jié)點可以切換成為主節(jié)點,繼續(xù)提供緩存服務(wù),避免了由于緩存實例宕機而導(dǎo)致的緩存雪崩問題。文章來源地址http://www.zghlxwxcb.cn/news/detail-632290.html

?

到了這里,關(guān)于Redis 如何解決緩存雪崩、緩存擊穿、緩存穿透難題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • redis緩存穿透、緩存擊穿、緩存雪崩及對應(yīng)解決方法

    緩存穿透、擊穿和雪崩是緩存使用中的常見問題,對它們的理解和相應(yīng)的解決方法對于維護系統(tǒng)性能和穩(wěn)定性至關(guān)重要。 定義 : 當(dāng)客戶端請求的數(shù)據(jù)在緩存中和數(shù)據(jù)庫中都不存在時,該請求會直接打到數(shù)據(jù)庫上,這種情況稱為緩存穿透。如果持續(xù)請求這樣的數(shù)據(jù),會給數(shù)據(jù)

    2024年04月08日
    瀏覽(21)
  • Redis緩存穿透、擊穿、雪崩問題及其解決方法

    Redis緩存穿透、擊穿、雪崩問題及其解決方法

    緩存穿透 :緩存穿透是指客戶端請求的數(shù)據(jù)在緩存中和數(shù)據(jù)庫中都不存在,這樣緩存永遠(yuǎn)不會生效,這些請求都會打到數(shù)據(jù)庫。 常見的解決方案有兩種: 緩存空對象 優(yōu)點:實現(xiàn)簡單,維護方便 缺點: 額外的內(nèi)存消耗 可能造成短期的不一致 布隆過濾 優(yōu)點:內(nèi)存占用較少,

    2024年02月02日
    瀏覽(17)
  • Redis:緩存擊穿、緩存穿透與緩存雪崩的區(qū)別、解決方案

    Redis:緩存擊穿、緩存穿透與緩存雪崩的區(qū)別、解決方案

    ? ? ? ? 近期學(xué)習(xí)redis相關(guān)原理,記錄一下開發(fā)過程中Redis的一些常見問題及應(yīng)對方法。 一句話總結(jié):先查 redis發(fā)現(xiàn)沒數(shù)據(jù) ,再去 數(shù)據(jù)庫查發(fā)現(xiàn)還是沒數(shù)據(jù) 。 這種情況下 緩存永遠(yuǎn)不會生效 ,數(shù)據(jù)庫將承擔(dān)巨大壓力。 ? ? ? ? 我們知道,redis的緩存作用,是在客戶端發(fā)起查

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

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

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

    2024年02月15日
    瀏覽(37)
  • Redis中的緩存雪崩、擊穿、穿透的原因以及解決辦法

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

    緩存雪崩、擊穿、穿透一旦發(fā)生,會導(dǎo)致大量的請求積壓到數(shù)據(jù)庫層。如果請求的并發(fā)量很大,就會導(dǎo)致數(shù)據(jù)庫宕機或是故障,這就是很嚴(yán)重的生產(chǎn)事故了。 俗話說,知己知彼,百戰(zhàn)不殆。了解了問題的成因,我們就能夠在應(yīng)用Redis緩存時,進行合理的緩存設(shè)置,以及相應(yīng)的

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

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

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

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

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

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

    2024年02月12日
    瀏覽(21)
  • 【Redis(8)】Spring Boot整合Redis和Guava,解決緩存穿透、緩存擊穿、緩存雪崩等緩存問題

    在緩存技術(shù)的挑戰(zhàn)及設(shè)計方案我們介紹了使用緩存技術(shù)可能會遇到的一些問題,那么如何解決這些問題呢? 在構(gòu)建緩存系統(tǒng)時,Spring Boot和Redis的結(jié)合提供了強大的支持,而Guava的 LoadingCache 則為緩存管理帶來了便捷的解決方案。下面我將介紹如何通過整合Spring Boot、Redis和Gu

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

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

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

    2024年02月16日
    瀏覽(23)
  • Redis——如何解決redis穿透、雪崩、擊穿問題

    Redis——如何解決redis穿透、雪崩、擊穿問題

    查詢商品信息的常規(guī)代碼示例 2.1、緩存擊穿的理解 高并發(fā)時,當(dāng)一個kev非常熱點(類似于爆款)在不停的扛著大并發(fā)當(dāng)這個key在失效的瞬間,持續(xù)的大并發(fā)就穿破緩存,直接請求數(shù)據(jù)庫并設(shè)置到緩存中,導(dǎo)致性能下降。 2.2、緩存擊穿的解決方案 設(shè)置緩存永不過期 加鎖排隊 2

    2024年02月11日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包