Redis雪崩、穿透、擊穿原理及解決方案

以下是 Redis 緩存穿透、擊穿與雪崩的原理及解決方案的深度解析,結合工業級實踐整理:


🔍 ?一、問題原理與區別?

?問題類型??觸發條件??核心特征??危害?
?緩存穿透?查詢?不存在的數據?繞過緩存直擊數據庫,導致無效查詢堆積數據庫被惡意請求壓垮
?緩存擊穿??熱點 Key 突然過期?高并發請求同時穿透緩存,訪問同一熱點數據數據庫瞬時并發壓力激增
?緩存雪崩??大量 Key 同時失效?或 Redis 宕機緩存大面積失效,請求集中訪問數據庫數據庫負載過載甚至崩潰

🛡? ?二、解決方案詳解?

?1. 緩存穿透(Cache Penetration)?
  • ?核心思路?:攔截非法請求,避免穿透到數據庫
    • ?① 布隆過濾器(Bloom Filter)?
      在緩存前加一層布隆過濾器,快速判斷數據是否存在(存在誤判率,需定期重建)

      // 偽代碼示例:查詢前先經過布隆過濾器
      if (!bloomFilter.mightContain(key)) return null; // 攔截非法key

    • ?② 緩存空對象(Null Caching)?
      數據庫查詢為空時,緩存?key:null?并設置短過期時間(如 5 分鐘)
    • ?③ 參數校驗?
      接口層過濾非法參數(如負數 ID、非合規格式)
?2. 緩存擊穿(Cache Breakdown)?
  • ?核心思路?:防止熱點 Key 失效時并發訪問數據庫
    • ?① 互斥鎖(Mutex Lock)?
      使用分布式鎖(如 Redisson)確保只有一個線程重建緩存,其他線程阻塞等待
      RLock lock = redisson.getLock("LOCK_PREFIX:" + key);
      lock.lock(); // 加鎖
      try {// 二次檢查緩存是否存在value = redis.get(key);if (value == null) {value = db.query(key); ?// 查數據庫redis.setex(key, 300, value); // 重建緩存}
      } finally {lock.unlock(); // 釋放鎖
      }
      
    • ?② 邏輯過期 + 異步刷新?
      不設置物理 TTL,后臺定時更新熱點數據或監聽變更主動刷新
    • ?③ 永不過期策略?
      對極熱點數據設置永不過期,通過邏輯控制更新時機
?3. 緩存雪崩(Cache Avalanche)?
  • ?核心思路?:分散失效時間,提升系統容錯性
    • ?① 差異化過期時間?
      對 Key 的 TTL 添加隨機值(如基礎 30 分鐘 + 隨機 0-10 分鐘)
      int baseExpire = 1800; // 基礎30分鐘
      int randomExpire = new Random().nextInt(600); // 隨機0-10分鐘
      redis.setex(key, baseExpire + randomExpire, value);
      
    • ?② 多級緩存架構?
      本地緩存(Caffeine) + Redis 分級緩存,避免單點失效
    • ?③ 集群高可用?
      部署 Redis 哨兵或集群模式,通過主從切換避免服務全宕
    • ?④ 熔斷降級?
      使用 Hystrix 或 Sentinel 在數據庫壓力暴增時觸發熔斷

💎 ?三、方案對比與選型建議?

?問題??優先級方案??適用場景??注意事項?
緩存穿透布隆過濾器 + 空值緩存高頻查詢不存在的數據(如防爬蟲)布隆過濾器需定期重建
緩存擊穿分布式鎖 + 邏輯過期秒殺、熱點新聞等突發流量場景鎖粒度要細,避免性能瓶頸
緩存雪崩隨機 TTL + 多級緩存大促期間批量緩存失效結合服務降級兜底

?實踐要點?:

  • 穿透防御:布隆過濾器攔截 + 空值緩存短過期(避免長期占用內存);
  • 擊穿防御:Redisson 鎖超時設置(防止死鎖),鎖等待時間不宜過長;
  • 雪崩防御:監控 Key 失效分布,動態調整隨機 TTL 范圍。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86355.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86355.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86355.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DFX 動態重構的概念和實現

DFX 動態重構的概念和實現 背景介紹 本文內容當前僅限于XILINX或者和XILINX具有相同結構的FPGA器件。 FPGA 技術提供了在現場進行編程和重新編程的靈活性,而無需通過重新制造流程來實現設計修改。動態功能交換(Dynamic Function eXchange, DFX&#x…

hutool 導出數據報錯:org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException

Excel 導出報錯 org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save: an error occurs while saving the package : The part /docProps/core.xml failed to be saved in the stream with marshaller org.apache.poi.openxml4j.opc.internal.marsh…

【學習】win 本地部署qwen3

這里寫自定義目錄標題 環境搭建下載Ollama安裝olama修改模型下載位置(可以不設置)通過ollama下載/啟動模型常用命令其他 環境搭建 下載Ollama 安裝olama 默認安裝位置是c盤 安裝到指定位置使用以下命令 OllamaSetup.exe /DIR"d:\Ollama"修改…

python的__init__.py

在此之前先確認一個概念是否弄清 模塊命名空間 1. 目錄結構 假設你有以下結構: testpkg/__init__.pyfool.pymaybe.py內容如下: fool.py # testpkg/fool.py class Fool:passmaybe.py # testpkg/maybe.py class Maybe:pass__init__.py &#xff08…

四核 A53+工業級存儲:移遠 SC200L 與 pSLC SD NAND 如何重構 T-BOX 性能邊界?

博客目錄 一、移遠 SC200L:T-BOX 的 “智慧大腦”二、米客方德 MKDN064GIL-ZA T-BOX:數據安全的堅固堡壘三、深度協同:拓展 T-BOX 應用邊界 在車聯網浪潮席卷而來的當下,T-BOX 作為汽車與外界交互的核心樞紐,其性能優劣…

JavaEE-統一功能處理

攔截器 實現強制登錄的功能, 后端程序根據Session來判斷??是否登錄, 但是實現?法是?較?煩的 需要修改每個接?的處理邏輯 需要修改每個接?的返回結果 接?定義修改, 前端代碼也需要跟著修改 有沒有更簡單的辦法, 統?攔截所有的請求, 并進?Session校驗呢, 這?我們學…

vscode運行c++文件和插件的方法

1.運行c文件全過程 VSCode運行C全教程-CSDN博客 按照以上的操作即可完成正常的配置流程。但是在運行我的文件時,總是出現終端和輸出混亂的情況,我想要在終端中進行輸入輸出的話,需要加一個改動:設置--輸入Run In Terminal--勾選…

利用云效實現自動化部署gitee倉庫中的項目

本文主要介紹如何利用云效 實現Node項目(vue/react....)自動化部署 1.準備工作 Git 倉庫【Gitee】 云服務器【華為云】 你的項目 2. 創建目錄 服務器上創建兩個目錄 一個專門用來放壓縮包: /home/www/dist (aaa.tgz bbb.tgz&am…

Flink SourceFunction深度解析:數據輸入的起點與奧秘

在Flink的數據處理流程中,StreamGraph構建起了作業執行的邏輯框架,而數據的源頭則始于SourceFunction。作為Flink數據輸入的關鍵組件,SourceFunction負責從外部數據源讀取數據,并將其轉換為Flink作業能夠處理的格式。深入理解Sour…

LabVIEW 共享變量通訊方式

在LabVIEW 開發中,共享變量(SharedVariable)作為實現數據實時交換的關鍵技術,廣泛應用于 LabVIEW、PLC 編程、分布式 SCADA 系統等領域。解析主流共享變量通訊機制的技術原理、性能特性及工程實踐中的選型策略。? 一、Network -P…

Angular進階之十二:Chrome DevTools+Angular實戰診斷指南

引言 最近有一個工單是說用戶在使用我們的系統的時候,如果使用某個頁面的次數多了以后瀏覽器就開始變慢甚至卡死崩潰掉。這個問題明顯是提示有內存泄露,今天就由這個問題開始分享一些關于內存泄漏的知識。 一、 Web 應用內存泄漏的危害與易忽略性 危害&…

在云服務器上搭建 MinIO 圖片存儲服務器及 Spring Boot 整合實現圖片上傳下載

一、MinIO 核心概念 MinIO 是一個高性能的分布式對象存儲服務器,兼容 Amazon S3 API,具有以下特點: 高性能:針對存儲和檢索優化 輕量級:單個二進制文件即可運行 云原生:支持 Kubernetes 部署 S3 兼容&a…

《深入解析:如何通過CSS集成WebGPU實現高級圖形效果》

當CSS的細膩筆觸遇上WebGPU的磅礴算力,兩者如同命運交織的織工,以代碼為絲線,在虛擬空間中編織出超越現實維度的靈境。這場融合不再局限于視覺呈現的革新,而是創造出一種能夠與用戶情感共鳴、突破物理法則束縛的沉浸式數字體驗&am…

R 語言科研繪圖 --- 環狀圖-匯總

在發表科研論文的過程中,科研繪圖是必不可少的,一張好看的圖形會是文章很大的加分項。 為了便于使用,本系列文章介紹的所有繪圖都已收錄到了 sciRplot 項目中,獲取方式: R 語言科研繪圖模板 --- sciRplothttps://mp.…

突破限制:實現頁面內精準監聽 localStorage 變更

突破限制:實現頁面內精準監聽 localStorage 變更 一、簡介二、示例演示三、StorageEvent重構setItem四、CustomEvent自定義事件同一頁面不同模塊數據同步五、MessageChannel同一頁面不同模塊數據同步六、BroadcastChannel多窗口數據同步七、CustomEventBroadcastCha…

牛客AI面試破解電銷招聘效率與成本雙重難題

在電銷行業,高流動性與大規模招聘需求長期困擾企業人力資源管理。傳統招聘模式下,HR需應對海量簡歷篩選、多輪面試協調、主觀評估偏差等挑戰,導致招聘周期長、成本高、人才匹配度低。如何通過技術手段實現精準篩選與效率提升?牛客…

智慧生產管控數字化平臺(源碼+文檔+講解+演示)

引言 在全球化和信息化的浪潮中,制造業正面臨著前所未有的挑戰和機遇。智慧生產管控數字化平臺應運而生,旨在通過數字化手段優化生產管控的全流程。本文將詳細介紹智慧生產管控數字化平臺的核心功能、技術架構以及如何通過開源代碼實現二次開發&#xf…

用Tensorflow進行線性回歸和邏輯回歸(九)

用TensorFlow訓練線性和邏輯回歸模型 這一節結合前面介紹的所有TensorFlow概念來訓練線性和邏輯回歸模型,使用玩具數據集。 用TensorFlow訓練模型 假如我們指明了數據點和標簽的容器,定義了張量操作的損失函數。添加了優化器節點到計算圖,…

使用 vue vxe-table 實現復選框禁用,根據行規則來禁用是否允許被勾選選中

使用 vue vxe-table 實現復選框禁用,根據行規則來禁用是否允許被勾選選中 查看官網:https://vxetable.cn 禁用選中 通過 checkMethod 方法控制 checkbox 是否允許用戶手動勾選,如果被禁用,可以調用 setCheckboxRow 方法手動設置…

【Linux-網絡】深入拆解TCP核心機制與UDP的無狀態設計

🎬 個人主頁:誰在夜里看海. 📖 個人專欄:《C系列》《Linux系列》《算法系列》 ?? 道阻且長,行則將至 目錄 📚引言 📚一、UDP協議 📖 1.概述 📖 2.特點 &#x1…