最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

緩存擊穿中邏輯過期和單純互斥鎖的區(qū)別及說明

 更新時間:2026年02月06日 15:33:29   作者:是碼龍不是碼農(nóng)  
本文介紹了兩種緩存過期策略:邏輯過期加互斥鎖和單純互斥鎖,邏輯過期加互斥鎖解決了緩存擊穿問題,避免了大量請求同時更新數(shù)據(jù)庫,單純互斥鎖在緩存過期后會刪除緩存并等待鎖釋放,邏輯過期更適合對實時性要求不高的場景,而單純互斥鎖則適用于對實時性要求高的場景

一、邏輯過期中加互斥鎖的核心原因

邏輯過期的核心是 “過期不刪緩存,返回舊數(shù)據(jù)”,但如果不加互斥鎖,會出現(xiàn)一個關(guān)鍵問題:當(dāng)緩存邏輯過期后,所有請求都會觸發(fā) “更新緩存” 的邏輯—— 哪怕你用了異步線程,也會導(dǎo)致大量異步任務(wù)同時去查數(shù)據(jù)庫、更新緩存,相當(dāng)于把 “緩存擊穿” 的壓力從 “同步請求打數(shù)據(jù)庫” 變成了 “異步線程打數(shù)據(jù)庫”,數(shù)據(jù)庫依然會被瞬間壓垮。

舉個具體例子:

  • 秒殺商品的緩存邏輯過期了,瞬間有 1000 個請求進來;
  • 如果不加鎖:這 1000 個請求都會觸發(fā)異步更新,1000 個線程同時查數(shù)據(jù)庫的商品庫存,數(shù)據(jù)庫直接扛不??;
  • 如果加鎖:只有 1 個請求能拿到鎖,觸發(fā) 1 次異步更新,剩下 999 個請求直接返回舊數(shù)據(jù),數(shù)據(jù)庫只承受 1 次查詢壓力。

所以,邏輯過期里的互斥鎖,目的是限制 “更新緩存” 的操作只能有一個請求執(zhí)行,徹底杜絕數(shù)據(jù)庫被大量更新請求沖擊,這是邏輯過期方案能防擊穿的 “最后一道保障”。

二、邏輯過期(加鎖) vs 單純互斥鎖(防緩存擊穿)的核心區(qū)別

先明確 “單純用互斥鎖防緩存擊穿” 的常規(guī)邏輯:

緩存物理過期(Redis 自動刪)→ 請求進來發(fā)現(xiàn)緩存空 → 搶鎖 → 搶到鎖的查數(shù)據(jù)庫、更新緩存 → 沒搶到鎖的等待 / 重試 → 最終拿到新緩存數(shù)據(jù)。

兩種方案的核心差異可以用表格清晰對比:

維度邏輯過期 + 互斥鎖單純互斥鎖(物理過期)
緩存是否被刪除物理永不過期(只判斷邏輯過期時間)物理過期(Redis 自動刪除緩存)
過期后請求的返回值直接返回舊數(shù)據(jù)(不阻塞)沒搶到鎖的請求會等待 / 重試(阻塞)
數(shù)據(jù)一致性短暫返回舊數(shù)據(jù)(最終會更新)拿到的都是最新數(shù)據(jù)(無臟數(shù)據(jù))
接口響應(yīng)速度極快(無論是否過期,都快速返回)過期瞬間的請求會有等待(響應(yīng)慢)
適用場景熱點 key、對實時性要求低、追求高可用(如首頁)數(shù)據(jù)實時性要求高、可接受

三、兩種方案的執(zhí)行流程對比(更直觀)

1. 單純互斥鎖(物理過期)的執(zhí)行流程

核心問題:緩存過期后,所有請求都要等鎖釋放,會出現(xiàn)請求堆積、接口響應(yīng)慢的情況。

2. 邏輯過期 + 互斥鎖的執(zhí)行流程

  • 核心優(yōu)勢:無論是否搶到鎖,都立刻返回舊數(shù)據(jù),接口無阻塞,只有 1 個異步線程去更新緩存。

四、關(guān)鍵補充:兩種方案的 “鎖” 作用不同

  • 單純互斥鎖:鎖的是 “查數(shù)據(jù)庫的權(quán)限”—— 因為緩存空了,必須保證只有一個請求查庫,否則就擊穿;
  • 邏輯過期 + 互斥鎖:鎖的是 “更新緩存的權(quán)限”—— 緩存還在(有舊數(shù)據(jù)),只是要更新,保證只有一個請求去更新,其他請求先用舊數(shù)據(jù)。

總結(jié)

  • 邏輯過期加互斥鎖,是為了防止緩存過期后大量請求同時觸發(fā)緩存更新,避免數(shù)據(jù)庫被異步更新請求壓垮;
  • 和單純互斥鎖的核心區(qū)別:邏輯過期方案不刪除緩存、返回舊數(shù)據(jù)、無請求阻塞,而單純互斥鎖會刪除緩存、等待鎖釋放、返回最新數(shù)據(jù);
  • 選型原則:對實時性要求低、追求高并發(fā)高可用選 “邏輯過期 + 鎖”,對實時性要求高選 “單純互斥鎖”。

通俗解釋二者區(qū)別

單純的互斥鎖的話只要緩存過期相當(dāng)于就在redis里面被刪除了,然后請求到redis發(fā)現(xiàn)沒緩存,然后就拿到互斥鎖去數(shù)據(jù)庫里面更新緩存是吧,其他線程就等待拿到互斥鎖的那個線程更新緩存完后才查到redis的緩存并且返回,然后其他線程拿不到鎖就會一直重試或者直接寫相關(guān)代碼友好返回暫無數(shù)據(jù),但是這個可以保證緩存和數(shù)據(jù)庫完全一致;

然后邏輯過期就是,放到緩存里面不設(shè)置過期時間,但是有一個邏輯過期字段,然后由于沒有實際過期時間,redis里面這個數(shù)據(jù)永久存在,然后就判斷是否邏輯過期而已,然后如果過期了也是其中一個拿互斥鎖去更新緩存,但是其余所有線程就先返回已經(jīng)邏輯過期的緩存而已,就不會耽擱其他線程,但是不能保證緩存和數(shù)據(jù)庫的一致性。

單純互斥鎖方案不強制要求提前預(yù)熱緩存數(shù)據(jù),哪怕沒緩存就會去數(shù)據(jù)庫查詢;但是邏輯過期必須要先提前預(yù)熱緩存數(shù)據(jù),邏輯過期的核心是 “緩存始終有數(shù)據(jù),哪怕是舊數(shù)據(jù)”,如果不預(yù)熱那么就體現(xiàn)不出邏輯過期方案的作用出來

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解centos7 yum安裝redis及常用命令

    詳解centos7 yum安裝redis及常用命令

    這篇文章主要介紹了centos7 yum安裝redis及常用命令,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • redis安裝和配置_動力節(jié)點Java學(xué)院整理

    redis安裝和配置_動力節(jié)點Java學(xué)院整理

    這篇文章主要介紹了redis安裝和配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Redis數(shù)據(jù)編碼詳解

    Redis數(shù)據(jù)編碼詳解

    這篇文章主要介紹了Redis數(shù)據(jù)編碼的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2026-03-03
  • 使用RedisAtomicInteger計數(shù)出現(xiàn)少計問題及解決

    使用RedisAtomicInteger計數(shù)出現(xiàn)少計問題及解決

    這篇文章主要介紹了使用RedisAtomicInteger計數(shù)出現(xiàn)少計問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Redis的過期鍵刪除策略原理說明

    Redis的過期鍵刪除策略原理說明

    這篇文章主要介紹了Redis的過期鍵刪除策略原理說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • redis基本安裝判斷、啟動使用方法示例

    redis基本安裝判斷、啟動使用方法示例

    這篇文章主要介紹了redis基本安裝判斷、啟動使用方法,結(jié)合實例形式分析了Redis針對是否安裝的判斷、啟動等使用方法,需要的朋友可以參考下
    2020-02-02
  • Redis BloomFilter實例講解

    Redis BloomFilter實例講解

    這篇文章主要介紹了Redis BloomFilter實例。BloomFilter不需要存儲key,節(jié)省空間,在某些對保密要求非常嚴(yán)格的場合有優(yōu)勢。想要進一步了解BloomFilter運用實例的小伙伴可以了解一下這篇文章
    2021-09-09
  • RedisTemplate中boundHashOps的使用小結(jié)

    RedisTemplate中boundHashOps的使用小結(jié)

    redisTemplate.boundHashOps(key)?是 RedisTemplate 類的一個方法,本文主要介紹了RedisTemplate中boundHashOps的使用小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • Redis實現(xiàn)每周熱評的項目實踐

    Redis實現(xiàn)每周熱評的項目實踐

    實時統(tǒng)計和展示熱門內(nèi)容是一種常見的需求,本文主要介紹了Redis實現(xiàn)每周熱評的項目實踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • 簡介Redis中的showlog功能

    簡介Redis中的showlog功能

    這篇文章主要介紹了簡介Redis中的showlog功能,作者同時對比了DEL命令的性能,需要的朋友可以參考下
    2015-06-06

最新評論

怀宁县| 华容县| 榆中县| 菏泽市| 凤台县| 盐池县| 峨眉山市| 无棣县| 玉环县| 文昌市| 本溪市| 威海市| 固原市| 玉门市| 永康市| 政和县| 云南省| 通城县| 昂仁县| 梅州市| 南部县| 那曲县| 郑州市| 望江县| 鹿泉市| 麦盖提县| 江孜县| 广安市| 龙井市| 区。| 民权县| 定边县| 抚顺县| 雅安市| 融水| 康马县| 集安市| 唐河县| 盘锦市| 江山市| 夏邑县|