1. Redis緩存中【緩存穿透、緩存擊穿、緩存雪崩】解決方案

        共 1418字,需瀏覽 3分鐘

         ·

        2020-12-20 13:39

        走過路過不要錯過

        點擊藍字關(guān)注我們

        1.前言

        當(dāng)我們設(shè)計一個Redis緩存服務(wù)時,緩存穿透、緩存擊穿、緩存雪崩這三大問題我們不得不考慮。同時參見面試時面試官也會常問這三大問題。本章我們來分析一下這三大問題。

        2.緩存穿透

        2.1什么叫緩存穿透?

        • 正常情況下,查詢數(shù)據(jù)無論在緩存中或者數(shù)據(jù)庫中,都應(yīng)該有這樣的數(shù)據(jù)。但如果這個數(shù)據(jù)在緩存和數(shù)據(jù)庫都?不存在?,那么用戶高并發(fā)環(huán)境下訪問?數(shù)據(jù)庫?和?緩存?中都?不存在的數(shù)據(jù)?稱之為緩存穿透現(xiàn)象.

        2.2穿透帶來的問題

        • 如果有些不懷好意的人,利用這個不存在的數(shù)據(jù),頻繁大量的訪問你的數(shù)據(jù)庫,產(chǎn)生大量的請求,極有可能導(dǎo)致你的數(shù)據(jù)庫異常訪問不了、數(shù)據(jù)庫宕掉。

        2.3解決方案

        1). 禁用IP 限制IP訪問.

        2). 限流 每秒最多訪問3次

        3).?布隆過濾器?(常見解決方案)

        4).?緩存空值?(簡單粗暴)

        • 布隆過濾器

          • 布隆過濾器(Bloom Filter)是1970年由布隆提出的。它實際上是一個?很長的二進制向量和一系列隨機映射函數(shù)?。布隆過濾器可以?用于檢索一個元素是否在一個集合中?。它的優(yōu)點是空間效率和查詢時間都比一般的算法要好的多,缺點是有一定的誤識別率和刪除困難。

          • 原理

          • 缺點:

          • 由于?hash碰撞問題?,可能由多個key有相同的位置,所以得出結(jié)論,布隆過濾器認為數(shù)據(jù)存在,那么數(shù)據(jù)可能存在.如果布隆過濾器認為數(shù)據(jù)不存在,則數(shù)據(jù)一定不在.

          • 解決方案

          • 1.擴容二進制向量位數(shù).

          • 2.增加hash函數(shù)的個數(shù)

          • 當(dāng)位數(shù)增加/函數(shù)適當(dāng)增加,則可以有效的降低hash碰撞的幾率. 默認值 0.03

        • 緩存空值

          • 這個方案簡單粗暴,就是拿到這些不存在數(shù)據(jù)key,并把value設(shè)置成null放到緩存中去,后面再請求這樣的數(shù)據(jù)直接到緩存查詢,返回給它null就可以了,切記也要給這些不存在數(shù)據(jù)的key設(shè)置失效時間。

        3.緩存擊穿

        3.1什么叫緩存擊穿?

        • 在高并發(fā)的環(huán)境下,大量請求同時請求同一個key,如果恰巧這個時候key失效了。那么當(dāng)某個熱點數(shù)據(jù)在緩存中?突然失效?.導(dǎo)致大量的用戶直接訪問數(shù)據(jù)庫.導(dǎo)致并發(fā)壓力過高造成異常這個現(xiàn)象被稱為?緩存擊穿

        3.2擊穿帶來的問題

        • 造成某個時刻所有訪問直接打在數(shù)據(jù)庫上,導(dǎo)致數(shù)據(jù)庫壓力劇增

        3.3解決方案

        1.盡可能將熱點數(shù)據(jù)的超時時間 設(shè)定的長一點

        2.設(shè)定多級緩存 超時時間采用隨機算法.

        4.緩存雪崩

        4.1什么叫緩存雪崩?

        • 在緩存服務(wù)器中,由于大量的緩存數(shù)據(jù)失效,導(dǎo)致用戶訪問的命中率過低.導(dǎo)致直接訪問數(shù)據(jù)庫.例如緩存服務(wù)宕機,然后大量請求直接訪問數(shù)據(jù)庫,極有導(dǎo)致數(shù)據(jù)庫也宕機.

        4.2雪崩帶來的問題

        導(dǎo)致緩存、數(shù)據(jù)庫等一系列服務(wù)宕機..

        4.3解決方案

        1. 使用集群緩存,保證緩存服務(wù)的高可用

        2. 設(shè)定超時時間時,應(yīng)該采用隨機算法




        往期精彩推薦



        騰訊、阿里、滴滴后臺面試題匯總總結(jié) — (含答案)

        面試:史上最全多線程面試題 !

        最新阿里內(nèi)推Java后端面試題

        JVM難學(xué)?那是因為你沒認真看完這篇文章


        END


        關(guān)注作者微信公眾號 —《JAVA爛豬皮》


        了解更多java后端架構(gòu)知識以及最新面試寶典


        你點的每個好看,我都認真當(dāng)成了


        看完本文記得給作者點贊+在看哦~~~大家的支持,是作者源源不斷出文的動力

        瀏覽 57
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 骚视频在线观看 | 午夜av影视 | 91叫床高潮娇喘嗯啊在线观看 | 亚洲欧美高清国产精品 | 脱了老师内裤猛烈进入动画 |