宅男在线永久免费观看网直播,亚洲欧洲日产国码无码久久99,野花社区在线观看视频,亚洲人交乣女bbw,一本一本久久a久久精品综合不卡

全部
常見問題
產(chǎn)品動態(tài)
精選推薦

如何防止緩存擊穿? 使用互斥鎖或熱點 Key 永不過期策略

管理 管理 編輯 刪除

緩存擊穿完整講解 + 防御方案

一、什么是緩存擊穿(Cache Breakdown)?

定義:

某個「熱點Key」非常重要,訪問量極高;

當它 剛好過期的那一刻,大量請求同時訪問該Key,由于緩存失效,會 瞬間全部打到數(shù)據(jù)庫,導致數(shù)據(jù)庫壓力驟增,甚至宕機。


二、緩存擊穿與其他問題的區(qū)別

問題類型觸發(fā)條件表現(xiàn)解決方向
緩存穿透請求不存在的數(shù)據(jù)(數(shù)據(jù)庫也無)每次都查DB加布隆過濾器或空值緩存
緩存擊穿熱點Key過期一瞬間DB被打爆加鎖、熱點Key永不過期
緩存雪崩大量Key同時過期DB壓力突增隨機過期時間 + 限流


三、緩存擊穿的防御方案

方案一:互斥鎖(Mutex Lock)

思路

當緩存失效時,只有一個請求能去查數(shù)據(jù)庫,其余請求等待。

適合「高并發(fā)下的熱點Key」。

實現(xiàn)示意(偽代碼):

String value = redis.get("product:1001");
if (value == null) {
    // 嘗試獲取分布式鎖
    if (tryLock("lock:product:1001")) {
        // double check 避免重復查詢
        value = redis.get("product:1001");
        if (value == null) {
            value = db.query("SELECT * FROM product WHERE id=1001");
            redis.set("product:1001", value, 60);
        }
        unlock("lock:product:1001");
    } else {
        // 其他線程短暫休眠后重試
        Thread.sleep(50);
        value = redis.get("product:1001");
    }
}
return value;

常用命令:

SET lock:product:1001 1 NX EX 5
NX:僅當鎖不存在時設(shè)置 EX:自動過期防死鎖


方案二:熱點 Key 永不過期 + 后臺異步更新

思路

對極熱點數(shù)據(jù)(如排行榜、商品詳情)——不要讓它自然過期,而是定時刷新。

做法:

  • 設(shè)置 Key 永不過期;
  • 使用定時任務(wù)或消息隊列定期更新內(nèi)容;
  • 或在請求線程中異步刷新:
// 異步刷新策略
if (System.currentTimeMillis() - cache.getUpdateTime("hotKey") > 10分鐘) {
    threadPool.submit(() -> refreshHotKeyFromDB());
}

優(yōu)點:

  • 不會發(fā)生“過期瞬間擊穿”
  • 適合讀多寫少、穩(wěn)定熱點數(shù)據(jù)

方案三:邏輯過期(雙層時間機制)

思路

緩存中設(shè)置一個邏輯過期時間,不立即刪除數(shù)據(jù),而是由后臺線程更新。

{
  "data": {...},
  "expireTime": "2025-10-28 14:00:00"
}

邏輯:

if (now < expireTime) {
    return cache.data; // 直接返回舊值
} else {
    // 異步線程去更新DB + 緩存
    refreshAsync();
    return cache.data; // 先返回舊數(shù)據(jù),保證服務(wù)穩(wěn)定
}

優(yōu)點:

  • 用戶始終有數(shù)據(jù)返回,不會訪問DB暴增
  • 類似“后臺熱更新”


方案四:多級緩存(本地 + Redis)

在應(yīng)用層增加一層 本地緩存(如 Caffeine/Guava),

Redis 過期時也能頂一會兒,進一步防止瞬間擊穿。


四、實際項目最佳實踐推薦

場景推薦方案
普通熱點Key(商品詳情)互斥鎖 + 雙查機制
極高熱度Key(首頁配置、排行榜)永不過期 + 定時刷新
高QPS系統(tǒng)(上億訪問)邏輯過期 + 異步刷新 + 本地緩存
分布式環(huán)境使用 Redisson 或 Redis 原生鎖


請登錄后查看

小碼二開 最后編輯于2025-10-28 14:22:20

快捷回復
回復
回復
回復({{post_count}}) {{!is_user ? '我的回復' :'全部回復'}}
排序 默認正序 回復倒序 點贊倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理員 企業(yè)

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推薦': '推薦'}}
{{item.is_suggest == 1? '取消推薦': '推薦'}} 【已收集】
{{item.floor}}# 沙發(fā) 板凳 地板 {{item.floor}}# 【已收集】
{{item.user_info.title || '暫無簡介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打賞
已打賞¥{{item.reward_price}}
{{item.like_count}}
分享
{{item.showReply ? '取消回復' : '回復'}}
刪除
回復
回復

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回復 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打賞
已打賞¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回復' : '回復'}}
刪除
回復
回復
查看更多
打賞
已打賞¥{{reward_price}}
217
{{like_count}}
{{collect_count}}
添加回復 ({{post_count}})

相關(guān)推薦

快速安全登錄

使用微信掃碼登錄
回復
回復
問題:
問題自動獲取的帖子內(nèi)容,不準確時需要手動修改. [獲取答案]
答案:
提交
bug 需求 取 消 確 定
打賞金額
當前余額:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
請輸入 0.1-{{reward_max_price}} 范圍內(nèi)的數(shù)值
打賞成功
¥{{price}}
完成 確認打賞

微信登錄/注冊

切換手機號登錄

{{ bind_phone ? '綁定手機' : '手機登錄'}}

{{codeText}}
切換微信登錄/注冊
暫不綁定
CRMEB客服

CRMEB咨詢熱線 咨詢熱線

400-8888-794

微信掃碼咨詢

CRMEB開源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
返回頂部 返回頂部
CRMEB客服