一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Redis緩存預(yù)熱+緩存雪崩+緩存擊穿+緩存穿透要點(diǎn)簡(jiǎn)析

馬哥Linux運(yùn)維 ? 來(lái)源:51CTO ? 2023-12-25 09:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、緩存預(yù)熱

1、定義

緩存預(yù)熱就是系統(tǒng)上線后,提前將相關(guān)的緩存數(shù)據(jù)直接加載到緩存系統(tǒng)。

避免在用戶請(qǐng)求的時(shí)候,先查詢數(shù)據(jù)庫(kù),然后再將數(shù)據(jù)緩存的問(wèn)題!用戶直接查詢事先被預(yù)熱的緩存數(shù)據(jù)!


2、解決方案

1)直接寫個(gè)緩存刷新頁(yè)面,上線時(shí)手工操作下。
2)數(shù)據(jù)量不大,可以在項(xiàng)目啟動(dòng)的時(shí)候自動(dòng)進(jìn)行加載。
3)定時(shí)刷新緩存。

2、緩存雪崩

發(fā)生原因
redis主機(jī)掛了,redis全面崩潰,偏硬件運(yùn)維
redis中有大量key同時(shí)過(guò)期大面積失效,偏軟件開(kāi)發(fā)


預(yù)防和解決
redis中key設(shè)置為永不過(guò)期or過(guò)期時(shí)間錯(cuò)開(kāi)
redis緩存集群實(shí)現(xiàn)高可用
    主從+哨兵
    redis cluster
    開(kāi)啟redis持久化機(jī)制aof/rdb,盡快恢復(fù)緩存集群
多緩存結(jié)合預(yù)防雪崩
    ehcache本地緩存+redis緩存
服務(wù)降級(jí)
    Hystrix或者阿里sentinel限流&降級(jí)

3、緩存擊穿

3.1、是什么

請(qǐng)求去查詢一條記錄,先查redis無(wú),后查mysql無(wú),都查詢不到該條記錄
但是請(qǐng)求每次都會(huì)打到數(shù)據(jù)庫(kù)上面去,導(dǎo)致后臺(tái)數(shù)據(jù)庫(kù)壓力暴增,這種現(xiàn)象稱為緩存穿透,rendis變成了一個(gè)擺設(shè)


簡(jiǎn)單來(lái)說(shuō),本來(lái)無(wú)一物,兩庫(kù)都沒(méi)有
即不在redis緩存庫(kù),也不在mysql,數(shù)據(jù)庫(kù)存在被多次暴擊風(fēng)險(xiǎn)

3.2、解決

fc5b0896-a244-11ee-8b88-92fbcf53809c.png

方案1:空對(duì)象緩存或者缺省值

第一種解決方案,回寫增強(qiáng)
如果發(fā)生了緩存穿透,我們可以針對(duì)要查詢的數(shù)據(jù),在Redis里存一個(gè)和業(yè)務(wù)部門商量后確定的缺省值(比如,零、負(fù)數(shù)、defaultNull等)。
比如,鍵uid:abcdxxx,值defaultNull作為案例的key和value
先去redis查鍵uid:abcdxxx沒(méi)有,再去mysql查沒(méi)有獲得 ,這就發(fā)生了一次穿透現(xiàn)象。


but,可以增強(qiáng)回寫機(jī)制
mysql也查不到的話也讓redis存入剛剛查不到的key并保護(hù)mysql。
第一次來(lái)查詢uid:abcdxxx,redis和mysql都沒(méi)有,返回null給調(diào)用者,但是增強(qiáng)回寫后第二次來(lái)查uid:abcdxxx,此時(shí)redis就有值了。
可以直接從Redis中讀取default缺省值返回給業(yè)務(wù)應(yīng)用程序,避免了把大量請(qǐng)求發(fā)送給mysql處理,打爆mysql。


但是,此方法架不住黑客的惡意攻擊,有缺陷......,只能解決key相同的情況


黑客或惡意攻擊
黑客會(huì)對(duì)你的系統(tǒng)進(jìn)行攻擊,拿一個(gè)不存在的id去查詢數(shù)據(jù),會(huì)產(chǎn)生大量的請(qǐng)求到數(shù)據(jù)庫(kù)去查詢,可能會(huì)導(dǎo)致你的數(shù)據(jù)庫(kù)由于壓力過(guò)大而宕掉


key相同打你系統(tǒng)
  第一次打到mysql空對(duì)象緩存后第二次就返回default Null缺省值
  避免mysql被攻擊,不用再到數(shù)據(jù)庫(kù)中去走一圈了
key不同打你系統(tǒng)
  由于存在空對(duì)象緩存和緩存會(huì)寫(看自己業(yè)務(wù)不限死)
  redis中的無(wú)關(guān)緊要的key也會(huì)越寫越多(記得設(shè)置redis過(guò)期時(shí)間)

方案2:Google布隆過(guò)濾器Guava解決緩存穿透

白名單架構(gòu)

fc71f7b8-a244-11ee-8b88-92fbcf53809c.png

布隆過(guò)濾器說(shuō)明

fc86e56a-a244-11ee-8b88-92fbcf53809c.png

誤判問(wèn)題,但是概率小可以接受,不能從布隆過(guò)濾器刪除
全部合法的key都需要放入Guava版布隆過(guò)濾器和redis里面,不然數(shù)據(jù)就是返回null

4、緩存穿透

4.1、是什么

大量的請(qǐng)求同時(shí)查詢一個(gè)key時(shí),此時(shí)這個(gè)key正好失效了,導(dǎo)致大量的請(qǐng)求都打到數(shù)據(jù)庫(kù)上面去
簡(jiǎn)單說(shuō)就是熱點(diǎn)key突然失效了,暴打mysql

4.1、危害

會(huì)造成某一時(shí)刻數(shù)據(jù)庫(kù)請(qǐng)求量過(guò)大,壓力劇增
一般技術(shù)部門需要知道熱點(diǎn)key時(shí)那些,防止擊穿

4.1、解決


熱點(diǎn)key失效
時(shí)間到了自然清除但還被訪問(wèn)到
delete掉的key,剛巧又被訪問(wèn)


方案1:
差異失效時(shí)間,對(duì)于訪問(wèn)頻繁的熱點(diǎn)key,干脆就不設(shè)置過(guò)期時(shí)間
方案2:
互斥更新,采用雙檢加鎖策略


多個(gè)線程同時(shí)去查詢數(shù)據(jù)庫(kù)的這條數(shù)據(jù),那么我們可以在第一個(gè)查詢數(shù)據(jù)的請(qǐng)求上使用一個(gè) 互斥鎖來(lái)鎖住它。
其他的線程走到這一步拿不到鎖就等著,等第一個(gè)線程查詢到了數(shù)據(jù),然后做緩存。后面的線程進(jìn)來(lái)發(fā)現(xiàn)已經(jīng)有緩存了,就直接走緩存。


5、總結(jié)

fc9bca8e-a244-11ee-8b88-92fbcf53809c.png

好了,今天的小知識(shí)你學(xué)會(huì)了嗎?

鏈接:https://blog.51cto.com/u_13236892/8955597







審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    850

    瀏覽量

    27728
  • 過(guò)濾器
    +關(guān)注

    關(guān)注

    1

    文章

    438

    瀏覽量

    20302
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    385

    瀏覽量

    11378

原文標(biāo)題:講透Redis 緩存預(yù)熱+緩存雪崩+緩存擊穿+緩存穿透

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何選擇合適的本地緩存?

    小編最近在使用系統(tǒng)的時(shí)候,發(fā)現(xiàn)盡管應(yīng)用已經(jīng)使用了 redis 緩存提高查詢效率,但是仍然有進(jìn)一步優(yōu)化的空間,于是想到了比分布式緩存性能更好的本地緩存,因此對(duì)領(lǐng)域內(nèi)常用的本地
    的頭像 發(fā)表于 01-18 11:19 ?1100次閱讀
    如何選擇合適的本地<b class='flag-5'>緩存</b>?

    使用Redis緩存model層

    〈譯〉使用REDIS處理RAILS MODEL緩存
    發(fā)表于 04-18 17:07

    redis緩存注解怎么使用

    spring boot —— redis 緩存注解使用教程
    發(fā)表于 09-11 14:43

    緩存的作用和設(shè)計(jì)模式

    查詢數(shù)據(jù),獲取數(shù)據(jù)后并加載到緩存;緩存失效:數(shù)據(jù)更新寫到數(shù)據(jù)庫(kù),操作成功后,讓緩存失效,查詢時(shí)候再重新加載;緩存穿透:查詢數(shù)據(jù)庫(kù)不存在的對(duì)象
    發(fā)表于 01-05 17:57

    Mybatis緩存之一級(jí)緩存

    本文主要講mybatis的一級(jí)緩存,一級(jí)緩存是SqlSession級(jí)別的緩存。mybatis提供查詢緩存,用于減輕數(shù)據(jù)壓力,提高數(shù)據(jù)庫(kù)性能。mybaits提供一級(jí)
    發(fā)表于 11-27 20:44 ?1303次閱讀
    Mybatis<b class='flag-5'>緩存</b>之一級(jí)<b class='flag-5'>緩存</b>

    Java 使用Redis緩存工具的詳細(xì)解說(shuō)

    本文是關(guān)于Java 使用Redis緩存工具的詳細(xì)解說(shuō)。詳細(xì)步驟請(qǐng)看下文
    的頭像 發(fā)表于 02-09 14:10 ?8030次閱讀
    Java 使用<b class='flag-5'>Redis</b><b class='flag-5'>緩存</b>工具的詳細(xì)解說(shuō)

    渲染中的幀緩存和深度緩存

    渲染涉及大量的緩存,這里緩存只是一個(gè)簡(jiǎn)單的存有像素?cái)?shù)據(jù)的矩形內(nèi)存塊,最重要緩存是幀緩存和深度緩存
    的頭像 發(fā)表于 05-14 11:44 ?7104次閱讀
    渲染中的幀<b class='flag-5'>緩存</b>和深度<b class='flag-5'>緩存</b>

    解決緩存雪崩的6大解決辦法

    使用Redis 哨兵模式或者Redis 集群部署方式,即便個(gè)別Redis 節(jié)點(diǎn)下線,整個(gè)緩存層依然可以使用。除此之外,還可以在多個(gè)機(jī)房部署 Redi
    發(fā)表于 09-13 11:37 ?2.7w次閱讀

    什么是Web緩存,HTTP緩存和瀏覽器緩存的區(qū)別

    前端緩存主要是分為HTTP緩存和瀏覽器緩存。其中HTTP緩存是在HTTP請(qǐng)求傳輸時(shí)用到的緩存,主要在服務(wù)器代碼上設(shè)置;而瀏覽器
    發(fā)表于 09-13 04:17 ?9645次閱讀
    什么是Web<b class='flag-5'>緩存</b>,HTTP<b class='flag-5'>緩存</b>和瀏覽器<b class='flag-5'>緩存</b>的區(qū)別

    緩存的基本原理 緩存的分類

    緩存的主要手段有:瀏覽器緩存、CDN、反向代理、本地緩存、分布式緩存、數(shù)據(jù)庫(kù)緩存。
    發(fā)表于 06-13 12:04 ?5084次閱讀

    緩存雪崩/穿透/擊穿的解決方案

    緩存是我們項(xiàng)目應(yīng)用肯定會(huì)使用,是我們數(shù)據(jù)庫(kù)的守護(hù)神,能夠保證數(shù)據(jù)庫(kù)的穩(wěn)定,能夠提高整個(gè)系統(tǒng)的性能。一般我們采用市面上的redis、memcahce方案;redis已經(jīng)非常強(qiáng)大了,每秒支持幾萬(wàn)的連接時(shí)不成問(wèn)題。
    發(fā)表于 01-26 09:44 ?1433次閱讀
    <b class='flag-5'>緩存</b><b class='flag-5'>雪崩</b>/<b class='flag-5'>穿透</b>/<b class='flag-5'>擊穿</b>的解決方案

    如何設(shè)計(jì)一個(gè)緩存系統(tǒng)?

    設(shè)計(jì)一個(gè)緩存系統(tǒng),不得不要考慮的問(wèn)題就是:緩存穿透緩存擊穿與失效時(shí)的雪崩效應(yīng)。
    的頭像 發(fā)表于 02-08 11:40 ?3145次閱讀

    如何在SpringBoot中解決Redis緩存穿透等問(wèn)題

    今天給大家介紹一下如何在SpringBoot中解決Redis緩存穿透緩存擊穿、緩存
    的頭像 發(fā)表于 04-28 11:35 ?914次閱讀

    緩存穿透了如何解決

    首先來(lái)了解幾個(gè)概念: 緩存穿透:大量請(qǐng)求根本不存在的key 緩存雪崩redis中大量key集體過(guò)期
    的頭像 發(fā)表于 05-23 09:54 ?900次閱讀
    <b class='flag-5'>緩存</b>被<b class='flag-5'>穿透</b>了如何解決

    聊聊本地緩存和分布式緩存

    本地緩存 :應(yīng)用中的緩存組件,緩存組件和應(yīng)用在同一進(jìn)程中,緩存的讀寫非???,沒(méi)有網(wǎng)絡(luò)開(kāi)銷。但各應(yīng)用或集群的各節(jié)點(diǎn)都需要維護(hù)自己的單獨(dú)緩存,無(wú)
    發(fā)表于 06-11 15:12 ?1048次閱讀
    聊聊本地<b class='flag-5'>緩存</b>和分布式<b class='flag-5'>緩存</b>