【Redis】緩存雪崩、緩存擊穿、緩存穿透

目錄

  • 1、緩存雪崩
    • 【1】定義
    • 【2】原因
    • 【3】解決方案
      • [1]差異化過期時間
      • [2]多級緩存
      • [3]熔斷降級
      • [4]緩存永不過期+異步更新
  • 2、緩存擊穿
    • 【1】定義
    • 【2】原因
    • 【3】解決方案
      • [1]互斥鎖
      • [2]邏輯過期
      • [3]熱點數據加載
  • 3、緩存穿透
    • 【1】定義
    • 【2】原因
    • 【3】解決方案
      • [1]緩存空對象
      • [2]布隆過濾器
      • [3]參數校驗
  • 4、對比總結
  • 5、最佳實踐

1、緩存雪崩

【1】定義

大量緩存數據在同一時間失效,導致所有請求直接打到數據庫,引發數據庫瞬時高負載甚至崩潰

【2】原因

1、緩存數據設置了相同的過期時間
2、緩存服務宕機

【3】解決方案

[1]差異化過期時間

在基礎TTL上增加隨機值,避免同時失效

[2]多級緩存

結合本地緩存和分布式緩存,本地緩存失效后回源到分布式緩存

[3]熔斷降級

監控數據庫負載,超過閾值時觸發熔斷(如返回默認值或限流)

[4]緩存永不過期+異步更新

緩存不設TTL,通過后臺任務定期更新(適合低頻變更數據)

2、緩存擊穿

【1】定義

某個熱點key突然失效,大量并發請求直接穿透到數據庫,導致數據庫壓力激增

【2】原因

1、熱點key過期
2、惡意請求故意攻擊高頻訪問的key

【3】解決方案

[1]互斥鎖

第一個請求發現緩存失效時,加鎖(如Redis SETNX),從數據庫加載數據后釋放鎖,其它請求等待或輪詢

[2]邏輯過期

1、緩存永不過期,但存儲數據時附加一個過期時間字段
2、發現數據邏輯過期時,觸發異步更新

[3]熱點數據加載

監控熱點key,在接近過期時提前刷新緩存

3、緩存穿透

【1】定義

查詢不存在的數據(如非法ID、惡意攻擊),導致請求繞過緩存直接訪問數據庫

【2】原因

1、業務邏輯漏洞(如未校驗參數合法性)
2、惡意攻擊(如爬蟲偽造不存在的ID)

【3】解決方案

[1]緩存空對象

對查詢不到的數據,混存一個空值,并設置較短TTL

[2]布隆過濾器

在緩存層前加布隆過濾器,快速判斷key是否存在:若布隆過濾器返回不存在,直接拒絕請求;若返回可能存在,繼續查詢緩存/數據庫

[3]參數校驗

對請求參數做合法性校驗

4、對比總結

問題觸發條件核心解決方案
緩存雪崩大量key同時失效差異化TTL、多級緩存、熔斷降級
緩存擊穿單個熱點key失效互斥鎖、邏輯過期、預加載
緩存穿透查詢不存在的數據布隆過濾器、控制緩存、參數校驗

5、最佳實踐

1、監控與告警:實時監控緩存命中率、數據庫QPS,設置閾值告警
2、壓測模擬:通過模擬雪崩/擊穿場景,驗證解決方案的可靠性
3、組合策略:根據業務場景混合使用上述方案

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

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

相關文章

【論文閱讀筆記】萬花筒:用于異構多智能體強化學習的可學習掩碼

摘要 在多智能體強化學習(MARL)中,通常采用參數共享來提高樣本效率。然而,全參數共享的流行方法通常會導致智能體之間的策略同質,這可能會限制從策略多樣性中獲得的性能優勢。為了解決這一關鍵限制,我們提出…

vue2 , el-select 多選樹結構,可重名

人家antd都支持,elementplus 也支持,vue2的沒有,很煩。 網上其實可以搜到各種的,不過大部分不支持重名,在刪除的時候可能會刪錯,比如樹結構1F的1樓啊,2F的1樓啊這種同時勾選的情況。。 可以全…

golang循環變量捕獲問題??

在 Go 語言中,當在循環中啟動協程(goroutine)時,如果在協程閉包中直接引用循環變量,可能會遇到一個常見的陷阱 - ??循環變量捕獲問題??。讓我詳細解釋一下: 問題背景 看這個代碼片段: fo…

【一文看懂Spring循環依賴】Spring循環依賴:從陷阱破局到架構涅槃

🌪? Spring Boot循環依賴:從陷阱破局到架構涅槃 循環依賴如同莫比烏斯環上的螞蟻,看似前進卻永遠困在閉環中。本文將帶你拆解Spring中這一經典難題,從臨時救火到根治重構,構建無懈可擊的依賴體系。 🔥 一、…

el-table封裝自動滾動表格(適用大屏)

表格功能&#xff1a;自動滾動&#xff0c;鼠標移入停止滾動&#xff0c;移出繼續滾動。如果想加觸底加載新數據可以判斷 scrollWrap.scrollTop和maxScrollTop大小來加載數據&#xff0c;另寫邏輯。 <template><el-table ref"eltable" :data"tableDa…

Eureka REST 相關接口

可供非 Java 應用程序使用的 Eureka REST 操作。 appID 是應用程序的名稱&#xff0c;instanceID 是與實例關聯的唯一標識符。在 AWS 云中&#xff0c;instanceID 是實例的實例 ID&#xff1b;在其他數據中心&#xff0c;它是實例的主機名。 對于 XML/JSON&#xff0c;HTTP 的…

DSP——時鐘樹講解

配置任何外設的第一步都要看一下時鐘樹,下圖是DSP28377的時鐘樹: 由圖所示DSP28377由4個時鐘源,分別是INTOSC1、INTOSC2、XTAL、AUXCL INTOSC1:0M內部系統時鐘,備用時鐘,檢測到系統時鐘缺失自動連接到備用時鐘,也作為看門狗時鐘使用; INTOSC2:10M內部系統時鐘,復位…

少量數據達到更好效果

九坤團隊新作&#xff01;一條數據訓練AI超越上萬條數據 一 僅需一條無標簽數據和10步優化 九坤團隊訓練了13,440個大模型&#xff0c;發現熵最小化 (EM) 僅需一條無標簽數據和10步優化&#xff0c;就能實現與強化學習中使用成千上萬條數據和精心設計的獎勵機制所取得的性能提…

html - <mark>標簽

<mark> 標簽在HTML中用于高亮顯示文本&#xff0c;通常用于突出顯示某些重要的部分。它的默認樣式通常是背景色為黃色&#xff0c;但你可以通過CSS自定義其外觀。 1. 基本用法 <mark> 標簽用于標記文本的高亮顯示。它常用于搜索結果中&#xff0c;突出顯示匹配的…

YOLOv8+ByteTrack:高精度人車過線統計系統搭建指南

文章目錄 1. 引言2. YOLOv8簡介3. 過線統計原理4. 代碼實現4.1 環境準備4.2 基礎檢測代碼4.3 過線統計實現4.4 完整代碼示例5. 性能優化與改進5.1 多線程處理5.2 區域檢測優化5.3 使用ByteTrack改進跟蹤6. 實際應用中的挑戰與解決方案7. 總結與展望1. 引言 目標檢測是計算機視…

20、React常用API和Hook索引

這一小節中只給出一些API和Hook的索引&#xff0c;需要用到的時候可以去官網查詢&#xff0c;如無必要此處不列出詳細用法。React v1.19.1。 對Components的支持 以下是開發時通用的一些功能組件 APIdescription<Fragment>通常使用 <>…</> 代替&#xff0…

Python爬蟲實戰:研究feedparser庫相關技術

1. 引言 1.1 研究背景與意義 在當今信息爆炸的時代,互聯網上存在著海量的信息資源。RSS(Really Simple Syndication)作為一種標準化的信息聚合技術,被廣泛用于網站內容的發布和訂閱。通過 RSS,用戶可以方便地獲取網站更新的內容,而無需頻繁訪問各個網站。 然而,互聯網…

HTML實現的2048游戲

以下是一個純HTML實現的2048游戲代碼&#xff0c;包含CSS和JavaScript&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>2048 Game</title><style>body {font-family: Arial, sans-serif;text-a…

使用Python 構建支持主流大模型與 Ollama 的統一接口平臺

?? 背景概述 近年來,隨著大語言模型(LLM)的蓬勃發展,OpenAI 的 GPT 系列、Google 的 Gemini、Anthropic 的 Claude、以及開源的 Ollama 本地模型等,逐漸成為自然語言處理、智能問答、AI 助手等應用的基礎組件。 開發者在使用這些模型時常面臨如下問題: 各模型接口不統…

計算機系統概述(4)

計算機系統層次結構&#xff1a;硬件層、系統層、應用層。 計算機的基本硬件系統由運算器、控制器、存儲器、輸入設備和輸出設備5大部件組成。 運算器、控制器等部件被集成在一起統稱為中央處理單元CPU。 存儲器是計算機系統中的記憶設備&#xff0c;分為內部存儲器和外部存…

Linux 下的COW機制(copy-on-write)

Linux通過MMU進行虛擬地址到物理地址的轉換&#xff0c;當進程執行fork()后&#xff0c;會把頁中的權限設置為RD-ONLY&#xff08;只讀&#xff09;。 MMU&#xff08;內存管理單元&#xff09; MMU本質是一個集成在CPU核心的硬件電路模塊&#xff0c;其核心任務是實現…

客戶案例 | 短視頻點播企業海外視頻加速與成本優化:MediaPackage+Cloudfront 技術重構實踐

01技術背景與業務挑戰 某短視頻點播企業深耕國內用戶市場&#xff0c;但其后臺應用系統部署于東南亞印尼 IDC 機房。 隨著業務規模擴大&#xff0c;傳統架構已較難滿足當前企業發展的需求&#xff0c;企業面臨著三重挑戰&#xff1a; ① 業務&#xff1a;國內用戶訪問海外服…

開發Vue.js組件的二三事

Vue.js作為一款漸進式JavaScript框架&#xff0c;其組件化開發模式是其核心優勢之一。在多年的Vue開發實踐中&#xff0c;我積累了一些組件開發的經驗和思考&#xff0c;在此與大家分享。 組件設計原則 單一職責原則 每個組件應該只關注一個特定的功能或UI部分。如果一個組件…

實現多路視頻截圖預覽之后上傳到后臺系統

********************父組件********************** <div class"camera-box" v-loading"i.loading"> <div class"camera-box-inner" v-for"(x, y) in i.children" :key"y children x.featureCode" v-show"…

分布式鎖-Redisson實現

目錄 本地鎖的局限性 Redisson解決分布式鎖問題 在分布式環境下&#xff0c;分布式鎖可以保證在多個節點上的并發操作時數據的一致性和互斥性。分布式鎖有多種實現方案&#xff0c;最常用的兩種方案是&#xff1a;zookeeper和redis&#xff0c;本文介紹redis實現分布式鎖方案…