成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

快收藏!一個(gè)技巧從此不再搞混緩存穿透和緩存擊穿

數(shù)據(jù)庫 Redis
緩存擊穿和緩存穿透是 Redis 中兩個(gè)常見的高頻面試問題,但又很容易搞混二者的定義,我們通過學(xué)習(xí)本文的內(nèi)容,相信可以徹底的區(qū)分二者的定義。

在 Redis 中有兩個(gè)定義:一個(gè)緩存擊穿、一個(gè)緩存穿透,因?yàn)槎叩拿直容^像,因此很容易就搞混了。但本文會(huì)給你提供一個(gè)記憶的小技巧,幫你徹底區(qū)分二者的定義。

在講這個(gè)技巧之前,我們先來了解一下二者的區(qū)別。

1.定義與區(qū)別

  • 緩存穿透(Cache Penetration):緩存穿透是指查詢的數(shù)據(jù)既不在緩存中,也不在數(shù)據(jù)庫中,但用戶仍然頻繁請求該數(shù)據(jù),導(dǎo)致請求直接穿透到數(shù)據(jù)庫,增加數(shù)據(jù)庫壓力。

a.核心問題:請求的數(shù)據(jù)根本不存在,但請求量很大,導(dǎo)致數(shù)據(jù)庫被無效查詢。

  • 緩存擊穿(Cache Breakdown):緩存擊穿是指 熱點(diǎn)數(shù)據(jù)的緩存失效,大量并發(fā)請求同時(shí)查詢該數(shù)據(jù),導(dǎo)致請求直接沖擊數(shù)據(jù)庫,增加數(shù)據(jù)庫壓力。

a.核心問題:緩存中的數(shù)據(jù)失效,但數(shù)據(jù)庫中有對應(yīng)的數(shù)據(jù),請求量集中導(dǎo)致數(shù)據(jù)庫壓力驟增。

2.常見場景

  • 緩存穿透

a.用戶請求不存在的 ID(如負(fù)數(shù) ID 或非法字符)。

b.惡意攻擊者故意請求不存在的數(shù)據(jù)。

c.示例:請求用戶 ID 為 -1 或不存在的用戶信息。

  • 緩存擊穿

a.熱點(diǎn)數(shù)據(jù)(如熱門商品信息、熱門新聞)的緩存過期。

b.大量用戶同時(shí)請求該熱點(diǎn)數(shù)據(jù)。

c.示例:促銷活動(dòng)中的熱門商品信息突然失效。

3. 解決方案

(1)緩存穿透的解決方案

布隆過濾器(Bloom Filter):在緩存層前加一層布隆過濾器,預(yù)存所有合法 Key 的哈希值。請求到達(dá)時(shí),先檢查布隆過濾器:

  • 如果不存在,直接攔截請求,返回空。
  • 如果存在,再查詢緩存或數(shù)據(jù)庫。
  • 優(yōu)點(diǎn):內(nèi)存占用少,能有效攔截不存在的請求。
  • 缺點(diǎn):可能存在誤判,需要合理設(shè)置參數(shù)。

緩存空值(Cache Null):對查詢結(jié)果為空的 Key,緩存一個(gè) Null 值,避免重復(fù)穿透。

  • 優(yōu)點(diǎn):實(shí)現(xiàn)簡單,能有效減少數(shù)據(jù)庫壓力。
  • 缺點(diǎn):可能會(huì)占用額外的緩存空間。

參數(shù)校驗(yàn):在查詢緩存之前,先對請求的參數(shù)進(jìn)行合法性檢查,如過濾非法字符、判斷參數(shù)范圍等,對于明顯錯(cuò)誤的參數(shù),直接攔截返回。

(2)緩存擊穿的解決方案

互斥鎖(Mutex Lock):當(dāng)緩存失效時(shí),通過分布式鎖讓一個(gè)線程重建緩存,其他線程等待鎖釋放后重試。

  • 優(yōu)點(diǎn):能有效避免多個(gè)線程同時(shí)查詢數(shù)據(jù)庫。
  • 缺點(diǎn):實(shí)現(xiàn)復(fù)雜,可能會(huì)影響性能。

永不過期(Logical Expiration):對熱點(diǎn) Key 設(shè)置物理永不過期,通過后臺(tái)異步線程定期更新緩存,保證數(shù)據(jù)新鮮度。

  • 優(yōu)點(diǎn):避免緩存失效導(dǎo)致的數(shù)據(jù)庫壓力。
  • 缺點(diǎn):需要額外的邏輯來管理緩存更新。

熔斷降級:在緩存失效期間,啟用降級策略(如返回默認(rèn)值或靜態(tài)頁面),保護(hù)數(shù)據(jù)庫。

  • 優(yōu)點(diǎn):能有效緩解數(shù)據(jù)庫壓力。
  • 缺點(diǎn):用戶體驗(yàn)可能受影響。

4.對比

問題

定義

常見場景

解決方案

緩存穿透

請求的數(shù)據(jù)既不在緩存中,也不在數(shù)據(jù)庫中,但請求量很大,導(dǎo)致數(shù)據(jù)庫壓力增大

非法請求、惡意攻擊

布隆過濾器、緩存空值、參數(shù)校驗(yàn)

緩存擊穿

熱點(diǎn)數(shù)據(jù)的緩存失效,大量并發(fā)請求直接沖擊數(shù)據(jù)庫

熱點(diǎn)數(shù)據(jù)失效、高并發(fā)場景

互斥鎖、永不過期、熔斷降級

通過理解它們的定義、場景和解決方案,你可以更清晰地區(qū)分緩存穿透和緩存擊穿,并在實(shí)際開發(fā)中選擇合適的解決方法。

5.記憶秘訣

  • 緩存擊穿:核心是熱點(diǎn)數(shù)據(jù)失效 -> 解決方案是重建熱點(diǎn)數(shù)據(jù)
  • 緩存穿透:核心是 Redis 和 MySQL 都沒有數(shù)據(jù) -> 解決方案是攔截?zé)o效請求

因此,我們可以認(rèn)為:

  • 緩存擊穿 -> 正常的數(shù)據(jù)失效引發(fā)的問題
  • 緩存穿透 -> 非正常的數(shù)據(jù)訪問引發(fā)的問題

就像警察叔叔審訊犯人一樣,我們可以用“擊穿犯罪嫌疑人的心里防線”,但不能用“穿透犯罪嫌疑的心里防線”,所以,擊穿是“正義之詞”,而穿透是“非正義之詞”,例如,你這點(diǎn)小心思,我還看不“透”,“透”這個(gè)詞通常是用來描述不好的事情的,因此我們可以使用這個(gè)技巧來徹底區(qū)分緩存擊穿和緩存穿透了,如下圖所示:

小結(jié)

緩存擊穿和緩存穿透是 Redis 中兩個(gè)常見的高頻面試問題,但又很容易搞混二者的定義,我們通過學(xué)習(xí)本文的內(nèi)容,相信可以徹底的區(qū)分二者的定義。

責(zé)任編輯:姜華 來源: 磊哥和Java
相關(guān)推薦

2019-11-05 14:24:31

緩存雪崩框架

2021-12-25 22:28:27

緩存穿透緩存擊穿緩存雪崩

2023-03-10 13:33:00

緩存穿透緩存擊穿緩存雪崩

2019-10-12 14:19:05

Redis數(shù)據(jù)庫緩存

2022-05-27 07:57:20

緩存穿透緩存雪崩緩存擊穿

2021-06-05 09:01:01

Redis緩存雪崩緩存穿透

2020-03-16 14:57:24

Redis面試雪崩

2023-04-14 07:34:19

2022-03-08 00:07:51

緩存雪崩數(shù)據(jù)庫

2022-11-18 14:34:28

2023-01-31 08:37:11

緩存穿透擊穿

2023-11-10 14:58:03

2024-03-12 10:44:42

2023-12-06 13:38:00

Redis緩存穿透緩存擊穿

2020-10-13 07:44:40

緩存雪崩 穿透

2023-05-15 10:03:00

Redis緩存穿透

2022-07-11 07:36:36

緩存緩存雪崩緩存擊穿

2020-10-23 10:46:03

緩存雪崩擊穿

2020-12-28 12:37:36

緩存擊穿穿透

2020-03-05 09:09:18

緩存原因方案
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品久久久久久久模特 | 中文字幕成人av | 国产精品一区二区三区在线 | 日韩美香港a一级毛片免费 国产综合av | 午夜影院在线播放 | 羞羞视频在线免费 | 亚洲 欧美 在线 一区 | 91在线视频精品 | 久久国| 亚洲欧美第一视频 | 日韩在线不卡 | 国产精品毛片无码 | 国产一级毛片精品完整视频版 | 国产在线一区观看 | 视频一二区 | 中文字幕一区二区三区四区 | 视频一区二区在线观看 | 久久久久亚洲精品中文字幕 | 在线看一区二区 | 久久精品色视频 | 一区二区免费高清视频 | 粉嫩一区二区三区性色av | 国产福利91精品 | 91精品国产91久久久久久 | 欧美久久久 | 国产精品久久国产精品 | 插插插干干干 | 色综合激情 | 国产精品一区在线观看 | 久久久91| 成人在线视频免费播放 | 欧美一区成人 | av大全在线| 天堂久久久久久久 | 国产人成精品一区二区三 | 综合久 | 国产在线一区二 | 国产精品久久久久久久久久久久 | 亚洲精品国产成人 | 久久9精品| 中文字幕精品视频 |