99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

1、緩存預(yù)熱

1、定義

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

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


2、解決方案

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

2、緩存雪崩

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


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

3、緩存擊穿

3.1、是什么

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


簡單來說,本來無一物,兩庫都沒有
即不在redis緩存庫,也不在mysql,數(shù)據(jù)庫存在被多次暴擊風(fēng)險

3.2、解決

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

方案1:空對象緩存或者缺省值

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


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


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


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


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

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

白名單架構(gòu)

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

布隆過濾器說明

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

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

4、緩存穿透

4.1、是什么

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

4.1、危害

會造成某一時刻數(shù)據(jù)庫請求量過大,壓力劇增
一般技術(shù)部門需要知道熱點key時那些,防止擊穿

4.1、解決


熱點key失效
時間到了自然清除但還被訪問到
delete掉的key,剛巧又被訪問


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


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


5、總結(jié)

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

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

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







審核編輯:劉清

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

    關(guān)注

    1

    文章

    861

    瀏覽量

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

    關(guān)注

    1

    文章

    439

    瀏覽量

    20404
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    387

    瀏覽量

    11456

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

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

    Mybatis緩存之一級緩存

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    如何在SpringBoot中解決Redis緩存穿透等問題

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

    緩存穿透了如何解決

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

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

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