欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

緩存被穿透了如何解決

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 2023-05-23 09:54 ? 次閱讀

首先來(lái)了解幾個(gè)概念:

緩存穿透:大量請(qǐng)求根本不存在的key

緩存雪崩:redis中大量key集體過(guò)期

緩存擊穿:redis中一個(gè)熱點(diǎn)key過(guò)期(大量用戶訪問(wèn)該熱點(diǎn)key,但是熱點(diǎn)key過(guò)期)

穿透解決方案

對(duì)空值進(jìn)行緩存

設(shè)置白名單

使用布隆過(guò)濾器

網(wǎng)警

雪崩解決方案

進(jìn)行預(yù)先的熱門詞匯的設(shè)置,進(jìn)行key時(shí)長(zhǎng)的調(diào)整

實(shí)時(shí)調(diào)整,監(jiān)控哪些數(shù)據(jù)是熱門數(shù)據(jù),實(shí)時(shí)的調(diào)整key的過(guò)期時(shí)長(zhǎng)

使用鎖機(jī)制

擊穿解決方案

進(jìn)行預(yù)先的熱門詞匯的設(shè)置,進(jìn)行key時(shí)長(zhǎng)的調(diào)整

實(shí)時(shí)調(diào)整,監(jiān)控哪些數(shù)據(jù)是熱門數(shù)據(jù),實(shí)時(shí)的調(diào)整key的過(guò)期時(shí)長(zhǎng)

使用鎖機(jī)制

三者出現(xiàn)的根本原因在于Redis命中率下降,請(qǐng)求直接打在DB上。

正常情況下,大量的資源請(qǐng)求都會(huì)被redis響應(yīng),在redis得不到響應(yīng)的小部分請(qǐng)求才會(huì)去請(qǐng)求DB,這樣DB的壓力是非常小的,是可以正常工作的(如下圖)

32969420-f8f4-11ed-90ce-dac502259ad0.png

如果大量的請(qǐng)求在redis上得不到響應(yīng),那么就會(huì)導(dǎo)致這些請(qǐng)求會(huì)直接去訪問(wèn)DB,導(dǎo)致DB的壓力瞬間變大而卡死或者宕機(jī)。

大量的高并發(fā)的請(qǐng)求打在redis上

這些請(qǐng)求發(fā)現(xiàn)redis上并沒(méi)有需要請(qǐng)求的資源,redis命中率降低

因此這些大量的高并發(fā)請(qǐng)求轉(zhuǎn)向DB(數(shù)據(jù)庫(kù)服務(wù)器)請(qǐng)求對(duì)應(yīng)的資源

DB壓力瞬間增大,直接將DB打垮,進(jìn)而引發(fā)一系列“災(zāi)害”

如下圖所示

32b3e2d2-f8f4-11ed-90ce-dac502259ad0.png

那么為什么redis會(huì)沒(méi)有需要訪問(wèn)的數(shù)據(jù)呢?通過(guò)分析大致可以總結(jié)為三種情況,也就對(duì)應(yīng)著redis的雪崩、穿透和擊穿

32caafa8-f8f4-11ed-90ce-dac502259ad0.png

情景分析

緩存穿透

緩存穿透產(chǎn)生的原因:請(qǐng)求根本不存在的資源(DB本身就不存在,Redis更是不存在)

舉例(情景在線):客戶端發(fā)送大量的不可響應(yīng)的請(qǐng)求

當(dāng)大量的客戶端發(fā)出類似于:http://localhost:8080/user/19833?id=-3872 的請(qǐng)求,就可能導(dǎo)致出現(xiàn)緩存穿透的情況。因?yàn)閿?shù)據(jù)庫(kù)DB中本身就沒(méi)有id=-3872的用戶的數(shù)據(jù),所以Redis也沒(méi)有對(duì)應(yīng)的數(shù)據(jù),那么這些請(qǐng)求在redis就得不到響應(yīng),就會(huì)直接打在DB上,導(dǎo)致DB壓力過(guò)大而卡死情景在線或宕機(jī)。

緩存穿透很有可能是黑客攻擊所為,黑客通過(guò)發(fā)送大量的高并發(fā)的無(wú)法響應(yīng)的請(qǐng)求給服務(wù)器,由于請(qǐng)求的資源根本就不存在,DB就很容易被打垮了。

解決方案

對(duì)空值進(jìn)行緩存:

類似于上面的例子,雖然數(shù)據(jù)庫(kù)中沒(méi)有id=-3872的用戶的數(shù)據(jù),但是在redis中對(duì)他進(jìn)行緩存(key=-3872,value=null),這樣當(dāng)請(qǐng)求到達(dá)redis的時(shí)候就會(huì)直接返回一個(gè)null的值給客戶端,避免了大量無(wú)法訪問(wèn)的數(shù)據(jù)直接打在DB上

實(shí)時(shí)監(jiān)控:

對(duì)redis進(jìn)行實(shí)時(shí)監(jiān)控,當(dāng)發(fā)現(xiàn)redis中的命中率下降的時(shí)候進(jìn)行原因的排查,配合運(yùn)維人員對(duì)訪問(wèn)對(duì)象和訪問(wèn)數(shù)據(jù)進(jìn)行分析查詢,從而進(jìn)行黑名單的設(shè)置限制服務(wù)(拒絕黑客攻擊)

使用布隆過(guò)濾器

使用BitMap作為布隆過(guò)濾器,將目前所有可以訪問(wèn)到的資源通過(guò)簡(jiǎn)單的映射關(guān)系放入到布隆過(guò)濾器中(哈希計(jì)算),當(dāng)一個(gè)請(qǐng)求來(lái)臨的時(shí)候先進(jìn)行布隆過(guò)濾器的判斷,如果有那么才進(jìn)行放行,否則就直接攔截

接口校驗(yàn)

類似于用戶權(quán)限的攔截,對(duì)于id=-3872這些無(wú)效訪問(wèn)就直接攔截,不允許這些請(qǐng)求到達(dá)Redis、DB上。

注意事項(xiàng):

使用空值作為緩存的時(shí)候,key設(shè)置的過(guò)期時(shí)間不能太長(zhǎng),防止占用太多redis資源

使用空值作為緩存只能防止黑客重復(fù)使用相同的id暴力攻擊,但是如果黑客使用動(dòng)態(tài)的無(wú)效id攻擊就沒(méi)有效果(需要配合網(wǎng)警)

使用布隆過(guò)濾器也是有哈希沖突的可能

緩存雪崩

緩存雪崩產(chǎn)生的原因:redis中大量的key集體過(guò)期

舉例:

當(dāng)redis中的大量key集體過(guò)期,可以理解為redis中的大部分?jǐn)?shù)據(jù)都被清空了(失效了),那么這時(shí)候如果有大量并發(fā)的請(qǐng)求來(lái)到,那么redis就無(wú)法進(jìn)行有效的響應(yīng)(命中率急劇下降),請(qǐng)求就都打到DB上了,到時(shí)DB直接崩潰。

解決方案:

將失效時(shí)間分散開

通過(guò)使用自動(dòng)生成隨機(jī)數(shù)使得key的過(guò)期時(shí)間是隨機(jī)的,防止集體過(guò)期

使用多級(jí)架構(gòu)

使用nginx緩存+redis緩存+其他緩存,不同層使用不同的緩存,可靠性更強(qiáng)

設(shè)置緩存標(biāo)記

記錄緩存數(shù)據(jù)是否過(guò)期,如果過(guò)期會(huì)觸發(fā)通知另外的線程在后臺(tái)去跟新實(shí)際的key

使用鎖或者隊(duì)列的方式

如果查不到就加上排它鎖,其他請(qǐng)求只能進(jìn)行等待

緩存擊穿

產(chǎn)生緩存雪崩的原因:redis中的某個(gè)熱點(diǎn)key過(guò)期,但是此時(shí)有大量的用戶訪問(wèn)該過(guò)期key

舉例:

類似于“某男明星塌房事件”上了熱搜,這時(shí)候大量的“粉絲”都在訪問(wèn)該熱點(diǎn)事件,但是可能優(yōu)于某種原因,redis的這個(gè)熱點(diǎn)key過(guò)期了,那么這時(shí)候大量高并發(fā)對(duì)于該key的請(qǐng)求就得不到redis的響應(yīng),那么就會(huì)將請(qǐng)求直接打在DB服務(wù)器上,導(dǎo)致整個(gè)DB癱瘓。

解決方案:

提前對(duì)熱點(diǎn)數(shù)據(jù)進(jìn)行設(shè)置

類似于新聞、某博等軟件都需要對(duì)熱點(diǎn)數(shù)據(jù)進(jìn)行預(yù)先設(shè)置在redis中

監(jiān)控?cái)?shù)據(jù),適時(shí)調(diào)整

監(jiān)控哪些數(shù)據(jù)是熱門數(shù)據(jù),實(shí)時(shí)的調(diào)整key的過(guò)期時(shí)長(zhǎng)

使用鎖機(jī)制

最后的防線,當(dāng)熱點(diǎn)key過(guò)期,那么就使用鎖機(jī)制防止大量的請(qǐng)求直接打在DB

審核編輯:彭靜
聲明:本文內(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)投訴
  • 緩存
    +關(guān)注

    關(guān)注

    1

    文章

    242

    瀏覽量

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

    關(guān)注

    1

    文章

    433

    瀏覽量

    19743
  • key
    key
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    12862

原文標(biāo)題:緩存被穿透了怎么辦?

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    何解決數(shù)據(jù)庫(kù)與緩存一致性

    緩存一致性 每次逢年過(guò)節(jié)的時(shí)候搶票非常艱難,放票的時(shí)候那么多人同時(shí)去搶票,如果所有人查詢、購(gòu)票等都去訪問(wèn)數(shù)據(jù)庫(kù),那數(shù)據(jù)庫(kù)的壓力得有多大,這時(shí)候很多都會(huì)引入緩存, 把車票信息放入緩存,這樣可以減少
    的頭像 發(fā)表于 09-25 15:25 ?1170次閱讀
    如<b class='flag-5'>何解</b>決數(shù)據(jù)庫(kù)與<b class='flag-5'>緩存</b>一致性

    何解決藍(lán)牙協(xié)議棧鎖問(wèn)題?

    何解決藍(lán)牙協(xié)議棧鎖問(wèn)題
    發(fā)表于 03-21 08:21

    使用altium designer時(shí)候出現(xiàn)了如下錯(cuò)誤

    使用altium designer時(shí)候出現(xiàn)了如下錯(cuò)誤,請(qǐng)問(wèn)應(yīng)該如何解決??跪謝!
    發(fā)表于 01-26 15:36

    搭建自己的IOT平臺(tái)---內(nèi)網(wǎng)穿透

    IOT平臺(tái)的外網(wǎng)訪問(wèn)。在虛擬機(jī)完成IOT平臺(tái)搭建之后,接下來(lái)就是內(nèi)網(wǎng)穿透了,其實(shí)很簡(jiǎn)單·,只需在花生殼官網(wǎng)注冊(cè)一個(gè)賬號(hào),每個(gè)賬號(hào)都會(huì)有兩個(gè)免費(fèi)的內(nèi)網(wǎng)穿透的域名供你使用。官網(wǎng)網(wǎng)址 https
    發(fā)表于 12-09 23:14

    汽車電池沒(méi)電了如何解決?教你“借電”技巧

    汽車電池沒(méi)電了如何解決?教你“借電”技巧 要發(fā)動(dòng)汽車,卻發(fā)現(xiàn)電池沒(méi)電了,想必許多人都遇到過(guò)這種情況。所以,如何正確“借電”也是開車的一門
    發(fā)表于 11-06 08:44 ?7747次閱讀

    iphone密碼多次輸入錯(cuò)誤鎖如何解?

    iphone密碼多次輸入錯(cuò)誤鎖如何解? iPhone允許您設(shè)置一個(gè)密碼,在開機(jī)或按下喚醒按鈕時(shí)可以輸入此密碼。這在 iPhone用戶指南和功能
    發(fā)表于 02-02 09:45 ?3.3w次閱讀

    何解決模擬混合信號(hào)設(shè)計(jì)的挑戰(zhàn)

    這種按需網(wǎng)絡(luò)研討會(huì)演示了如何解決模擬混合信號(hào)設(shè)計(jì)挑戰(zhàn)增加可靠性和速度與AMS墊專業(yè)產(chǎn)品開發(fā)。
    的頭像 發(fā)表于 10-18 07:08 ?3575次閱讀

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

    緩存是我們項(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 ?1340次閱讀
    <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 ?2992次閱讀

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

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

    基于循環(huán)隊(duì)列的FIFO緩存實(shí)現(xiàn)

    FIFO緩存是介于兩個(gè)子系統(tǒng)之間的彈性存儲(chǔ)器,其概念圖如圖1所示。它有兩個(gè)控制信號(hào),wr和rd,用于讀操作和寫操作。當(dāng)wr插入時(shí),輸入的數(shù)據(jù)寫入緩存,此時(shí)讀操作被忽視。FIFO
    的頭像 發(fā)表于 09-11 10:12 ?878次閱讀
    基于循環(huán)隊(duì)列的FIFO<b class='flag-5'>緩存</b>實(shí)現(xiàn)

    為什么GPU獲得了如此多的緩存?

    不久之前,如果您想要一個(gè)內(nèi)置大量緩存的處理器,那么 CPU 是顯而易見(jiàn)的選擇?,F(xiàn)在,即使是預(yù)算級(jí) GPU 也比幾年前的高端 CPU 配備了更多的內(nèi)存。
    的頭像 發(fā)表于 10-07 17:37 ?1966次閱讀
    為什么GPU獲得<b class='flag-5'>了如</b>此多的<b class='flag-5'>緩存</b>?

    如何使用緩存

    緩存技術(shù)認(rèn)為是減輕服務(wù)器負(fù)載、降低網(wǎng)絡(luò)擁塞、增強(qiáng)Web可擴(kuò)展性的有效途徑之一,其基本思想是利用客戶訪問(wèn)的時(shí)間局部性(Temproral Locality)原理, 將客戶訪問(wèn)過(guò)的內(nèi)容在Cache中
    的頭像 發(fā)表于 10-08 14:07 ?709次閱讀

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

    緩存預(yù)熱就是系統(tǒng)上線后,提前將相關(guān)的緩存數(shù)據(jù)直接加載到緩存系統(tǒng)。
    的頭像 發(fā)表于 12-25 09:41 ?946次閱讀
    Redis<b class='flag-5'>緩存</b>預(yù)熱+<b class='flag-5'>緩存</b>雪崩+<b class='flag-5'>緩存</b>擊穿+<b class='flag-5'>緩存</b><b class='flag-5'>穿透</b>要點(diǎn)簡(jiǎn)析

    HTTP緩存頭的使用 本地緩存與遠(yuǎn)程緩存的區(qū)別

    :資源的特定版本標(biāo)識(shí),用于驗(yàn)證資源是否修改。 Last-Modified :資源最后修改時(shí)間,用于驗(yàn)證資源是否修改。 Vary :告訴緩存服務(wù)
    的頭像 發(fā)表于 12-18 09:41 ?178次閱讀