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

Redis緩存穿透,雪崩,擊穿

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

一、緩存

1、定義

緩存就是數(shù)據(jù)交換的緩沖區(qū),緩存就是緩沖區(qū)內(nèi)的數(shù)據(jù),一般從數(shù)據(jù)庫中獲取,存儲(chǔ)于本地代碼。

由于其被Static修飾,所以隨著類的加載而被加載到內(nèi)存之中,作為本地緩存,由于其又被final修飾,所以其引用和對(duì)象之間的關(guān)系是固定的,不能改變,因此不用擔(dān)心賦值(=)導(dǎo)致緩存失效。

2、作用

緩存數(shù)據(jù)存儲(chǔ)于代碼中,而代碼運(yùn)行在內(nèi)存中,內(nèi)存的讀寫性能遠(yuǎn)高于磁盤,緩存可以大大降低用戶訪問并發(fā)量帶來的服務(wù)器讀寫壓力

二、緩存穿透

1、產(chǎn)生原因

緩存穿透指客戶端請(qǐng)求的數(shù)據(jù)在緩存中和數(shù)據(jù)庫中都不存在,這樣緩存永遠(yuǎn)不會(huì)生效,這些請(qǐng)求都會(huì)打到數(shù)據(jù)庫。先查Redis,再查數(shù)據(jù)庫。當(dāng)高度發(fā)的訪問請(qǐng)求到達(dá)時(shí),緩存穿透不僅增加了響應(yīng)時(shí)間,而且還會(huì)引發(fā)對(duì) DBMS 的高并發(fā)查詢,這種高并發(fā)查詢很可能會(huì)導(dǎo)致DBMS的崩潰。

2、解決方案

①緩存空對(duì)象

優(yōu)點(diǎn):增強(qiáng)回寫,實(shí)現(xiàn)簡(jiǎn)單,維護(hù)方便;缺點(diǎn):增加內(nèi)存消耗,數(shù)據(jù)不一致。

②布隆過濾器

優(yōu)點(diǎn):內(nèi)存占用較少,沒有多余key;缺點(diǎn):實(shí)現(xiàn)復(fù)雜,存在誤判可能。

3、緩存空對(duì)象思路

當(dāng)我們客戶端訪問不存在的數(shù)據(jù)時(shí),先請(qǐng)求redis,但是此時(shí)redis中沒有數(shù)據(jù),此時(shí)會(huì)訪問到數(shù)據(jù)庫,但是數(shù)據(jù)庫中也沒有數(shù)據(jù),這個(gè)數(shù)據(jù)穿透了緩存打到數(shù)據(jù)庫,所以即使數(shù)據(jù)庫不存在數(shù)據(jù),也要存儲(chǔ)到redis,下次訪問不存在的數(shù)據(jù)也不會(huì)去請(qǐng)求數(shù)據(jù)庫,而是請(qǐng)求redis。

4、布隆過濾器思路

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

總結(jié)一句話:將所有的key放到布隆過濾器+redis里面,其余返回null。

三、緩存雪崩

1、產(chǎn)生原因

緩存雪崩是指在同一時(shí)段大量的緩存key同時(shí)失效或者Redis服務(wù)宕機(jī),導(dǎo)致大量請(qǐng)求到達(dá)數(shù)據(jù)庫,帶來巨大壓力。

2、解決

①redis中key設(shè)置永不過期或者過期時(shí)間不同、

②redis緩存集群實(shí)現(xiàn)高可用,即使用主從復(fù)制和哨兵機(jī)制以及開啟redis持久化aof和rdb,恢復(fù)緩存集群。

③多緩存結(jié)合預(yù)防雪崩——ehcache本機(jī)緩存+redis緩存

④服務(wù)降級(jí)——哨兵限流和降級(jí)。

四、緩存擊穿

1、產(chǎn)生原因

緩存擊穿問題也叫熱點(diǎn)Key問題,就是一個(gè)被高并發(fā)訪問并且緩存重建業(yè)務(wù)較復(fù)雜的key突然失效了,無數(shù)的請(qǐng)求訪問會(huì)在瞬間給數(shù)據(jù)庫帶來巨大的沖擊。造成某一時(shí)刻的數(shù)據(jù)庫請(qǐng)求量過大,壓力劇增。

2、解決

①差異失效時(shí)間,對(duì)于訪問頻繁的key,不設(shè)置過期時(shí)間。

②互斥鎖

多個(gè)線程同時(shí)去查詢數(shù)據(jù)庫的這條數(shù)據(jù),我們?cè)诘谝粋€(gè)查詢數(shù)據(jù)的請(qǐng)求上使用一個(gè)互斥鎖來鎖住

其他的線程走到這一步拿不到鎖等著。等到第一個(gè)線程查詢到數(shù)據(jù)做緩存,后面的線程進(jìn)來發(fā)現(xiàn)已經(jīng)有緩存,直接走緩存。文章來源地址http://www.zghlxwxcb.cn/news/detail-496995.html

 public Shop queryWithMutex(Long id)  {
        String key = CACHE_SHOP_KEY + id;
        // 1、從redis中查詢商鋪緩存
        String shopJson = stringRedisTemplate.opsForValue().get("key");
        // 2、判斷是否存在
        if (StrUtil.isNotBlank(shopJson)) {
            // 存在,直接返回
            return JSONUtil.toBean(shopJson, Shop.class);
        }
        //判斷命中的值是否是空值
        if (shopJson != null) {
            //返回一個(gè)錯(cuò)誤信息
            return null;
        }
        // 4.實(shí)現(xiàn)緩存重構(gòu)
        //4.1 獲取互斥鎖
        String lockKey = "lock:shop:" + id;
        Shop shop = null;
        try {
            boolean isLock = tryLock(lockKey);
            // 4.2 判斷否獲取成功
            if(!isLock){
                //4.3 失敗,則休眠重試
                Thread.sleep(50);
                return queryWithMutex(id);
            }
            //4.4 成功,根據(jù)id查詢數(shù)據(jù)庫
             shop = getById(id);
            // 5.不存在,返回錯(cuò)誤
            if(shop == null){
                 //將空值寫入redis
                stringRedisTemplate.opsForValue().set(key,"",CACHE_NULL_TTL,TimeUnit.MINUTES);
                //返回錯(cuò)誤信息
                return null;
            }
            //6.寫入redis
            stringRedisTemplate.opsForValue().set(key,JSONUtil.toJsonStr(shop),CACHE_NULL_TTL,TimeUnit.MINUTES);

        }catch (Exception e){
            throw new RuntimeException(e);
        }
        finally {
            //7.釋放互斥鎖
            unlock(lockKey);
        }
        return shop;
    }

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

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(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之緩存穿透+緩存雪崩+緩存擊穿

    在生產(chǎn)環(huán)境中,會(huì)因?yàn)楹芏嗟脑蛟斐稍L問請(qǐng)求繞過了緩存,都需要訪問數(shù)據(jù)庫持久層,雖然對(duì)Redsi緩存服務(wù)器不會(huì)造成影響,但是數(shù)據(jù)庫的負(fù)載就會(huì)增大,使緩存的作用降低 ??緩存穿透是指查詢一個(gè)根本不存在的數(shù)據(jù),緩存層和持久層都不會(huì)命中。在日常工作中出于容錯(cuò)

    2023年04月09日
    瀏覽(24)
  • Redis的緩存穿透,緩存擊穿,緩存雪崩

    Redis的緩存穿透,緩存擊穿,緩存雪崩

    什么是緩存穿透? 緩存穿透說簡(jiǎn)單點(diǎn)就是大量請(qǐng)求的 key 是不合理的, 根本不存在于緩存中,也不存在于數(shù)據(jù)庫中 。這就導(dǎo)致這些請(qǐng)求直接到了數(shù)據(jù)庫上,根本沒有經(jīng)過緩存這一層,對(duì)數(shù)據(jù)庫造成了巨大的壓力,可能直接就被這么多請(qǐng)求弄宕機(jī)了。 eg:某個(gè)黑客故意制造一

    2024年02月10日
    瀏覽(20)
  • 68、Redis:緩存雪崩、緩存穿透、緩存擊穿

    緩存雪崩是指緩存同一時(shí)間大面積的失效,所以,后面的請(qǐng)求都會(huì)落到數(shù)據(jù)庫上,造成數(shù)據(jù)庫短時(shí)間內(nèi)承受大量請(qǐng)求而崩掉。 緩存數(shù)據(jù)的過期時(shí)間設(shè)置隨機(jī),防止同一時(shí)間大量數(shù)據(jù)過期現(xiàn)象發(fā)生 給每一個(gè)緩存數(shù)據(jù)增加相應(yīng)的緩存標(biāo)記,記錄緩存是否失效,如果緩存標(biāo)記失效

    2024年02月16日
    瀏覽(22)
  • Redis 緩存預(yù)熱+緩存雪崩+緩存擊穿+緩存穿透

    Redis 緩存預(yù)熱+緩存雪崩+緩存擊穿+緩存穿透

    面試題: 緩存預(yù)熱、雪萌、穿透、擊穿分別是什么?你遇到過那幾個(gè)情況? 緩存預(yù)熱你是怎么做的? 如何造免或者減少緩存雪崩? 穿透和擊穿有什么區(qū)別?他兩是一個(gè)意思還是載然不同? 穿適和擊穿你有什么解決方案?如何避免? 假如出現(xiàn)了緩存不一致,你有哪些修補(bǔ)方

    2024年02月10日
    瀏覽(20)
  • Redis緩存預(yù)熱-緩存穿透-緩存雪崩-緩存擊穿

    Redis緩存預(yù)熱-緩存穿透-緩存雪崩-緩存擊穿

    什么叫緩存穿透? 模擬一個(gè)場(chǎng)景: 前端用戶發(fā)送請(qǐng)求獲取數(shù)據(jù),后端首先會(huì)在緩存Redis中查詢,如果能查到數(shù)據(jù),則直接返回.如果緩存中查不到數(shù)據(jù),則要去數(shù)據(jù)庫查詢,如果數(shù)據(jù)庫有,將數(shù)據(jù)保存到Redis緩存中并且返回用戶數(shù)據(jù).如果數(shù)據(jù)庫沒有則返回null; 這個(gè)緩存穿透的問題就是這個(gè)

    2024年03月09日
    瀏覽(29)
  • Redis(緩存預(yù)熱,緩存雪崩,緩存擊穿,緩存穿透)

    Redis(緩存預(yù)熱,緩存雪崩,緩存擊穿,緩存穿透)

    目錄 一、緩存預(yù)熱 二、緩存雪崩 三、緩存擊穿 四、緩存穿透 ? 開過車的都知道,冬天的時(shí)候啟動(dòng)我們的小汽車之后不要直接駕駛,先讓車子發(fā)動(dòng)機(jī)預(yù)熱一段時(shí)間再啟動(dòng)。緩存預(yù)熱是一樣的道理。 緩存預(yù)熱就是系統(tǒng)啟動(dòng)前,提前將相關(guān)的緩存數(shù)據(jù)直接加載到緩存系統(tǒng)。避免

    2024年02月10日
    瀏覽(36)
  • Redis 緩存穿透擊穿和雪崩

    Redis 緩存穿透擊穿和雪崩

    ???????? Redis 緩存的使用,極大的提升了應(yīng)用程序的性能和效率,特別是數(shù)據(jù)查詢方面。但同時(shí),它也帶來了一些問題。其中,最要害的問題,就是數(shù)據(jù)的一致性問題,從嚴(yán)格意義上講,這個(gè)問題無解。如果對(duì)數(shù)據(jù)的一致性要求很高,那么就不能使用緩存。 2.1 概念 ???

    2024年02月10日
    瀏覽(33)
  • redis緩存雪崩、穿透和擊穿

    redis緩存雪崩、穿透和擊穿

    緩存雪崩 ? 對(duì)于系統(tǒng) A,假設(shè)每天高峰期每秒 5000 個(gè)請(qǐng)求,本來緩存在高峰期可以扛住每秒 4000 個(gè)請(qǐng)求,但是緩存機(jī)器意外發(fā)生了全盤宕機(jī)或者大量緩存集中在某一個(gè)時(shí)間段失效。緩存掛了,此時(shí) 1 秒 5000 個(gè)請(qǐng)求全部落數(shù)據(jù)庫,數(shù)據(jù)庫必然扛不住,它會(huì)報(bào)一下警,然后就掛了

    2024年01月22日
    瀏覽(19)
  • Redis 緩存雪崩、穿透、擊穿、預(yù)熱

    Redis 緩存雪崩、穿透、擊穿、預(yù)熱

    ????????在實(shí)際工程中,Redis 緩存問題常伴隨高并發(fā)場(chǎng)景出現(xiàn)。例如, 電商大促、活動(dòng)報(bào)名、突發(fā)新聞 時(shí),由于緩存失效導(dǎo)致大量請(qǐng)求訪問數(shù)據(jù)庫,導(dǎo)致 雪崩 、 擊穿 、 穿透 等問題。因此,新系統(tǒng)上線前需 預(yù)熱 緩存,以應(yīng)對(duì)高并發(fā),減輕數(shù)據(jù)庫壓力。本章主要圍繞這

    2024年04月12日
    瀏覽(22)
  • Redis的緩存穿透、緩存擊穿和緩存雪崩

    Redis的緩存穿透、緩存擊穿和緩存雪崩

    目錄 一、解釋說明 二、緩存穿透 ?1.?什么是緩存穿透? ?2. 常見的兩種解決方案 ?(1)緩存空對(duì)象 ?(2)布隆過濾 3.?編碼解決商品查詢的緩存穿透問題 三、緩存擊穿 ?1.? 什么是緩存擊穿? ?2、緩存擊穿解決方案(2種) (1)互斥鎖 (2)邏輯過期 ?3.? 互斥鎖與邏輯過

    2024年02月14日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包