Redis 中的緩存擊穿、緩存穿透和緩存雪崩是什么?

在 Redis 中,緩存擊穿、緩存穿透和緩存雪崩是常見的緩存問題,它們都會影響系統的性能和穩定性。以下是針對這三個問題的詳細解釋:

一、緩存擊穿(Cache Breakdown)

定義:緩存擊穿是指某個熱點數據在緩存中過期或不存在,而此時有大量并發請求同時訪問該數據。由于緩存中沒有該數據,所有請求都會直接落到數據庫上,導致數據庫壓力驟增,甚至可能引發數據庫宕機。

特點

  • 并發性:大量并發請求同時訪問同一個熱點數據。
  • 數據熱點:被訪問的數據是熱點數據,即經常被訪問的數據。
  • 緩存失效:緩存中的數據恰好過期或不存在。

解決方案

  • 互斥鎖:在訪問數據庫之前,先獲取一個互斥鎖。如果獲取成功,則訪問數據庫并更新緩存;如果獲取失敗,則等待一段時間后重試。這樣可以確保同一時間只有一個請求能夠訪問數據庫,避免并發請求對數據庫造成過大壓力。
  • 永不過期:為熱點數據設置一個較長的過期時間或根本不設置過期時間,從而避免緩存過期導致的問題。但這種方法可能會占用較多的緩存空間,且當數據需要更新時,需要手動或通過其他機制來更新緩存。
  • 邏輯過期:在緩存中設置數據的邏輯過期時間,而不是實際的過期時間。當訪問數據時,先檢查邏輯過期時間,如果已過期,則異步更新緩存,同時返回舊數據給客戶端。這樣可以減少對數據庫的直接訪問。

二、緩存穿透(Cache Penetration)

定義:緩存穿透是指查詢一個在緩存和數據庫中都不存在的數據。由于緩存中沒有該數據,所有請求都會直接落到數據庫上,導致數據庫壓力驟增。與緩存擊穿不同的是,緩存穿透通常是由惡意攻擊或程序錯誤導致的,攻擊者可能故意查詢不存在的數據來耗盡數據庫資源。

特點

  • 數據不存在:查詢的數據在緩存和數據庫中都不存在。
  • 大量請求:大量并發請求同時查詢不存在的數據。
  • 惡意攻擊:可能是由惡意攻擊或程序錯誤導致的。

解決方案

  • 緩存空值:當查詢一個不存在的數據時,將該空值也緩存起來,并設置一個較短的過期時間。這樣,在過期時間內再次查詢該數據時,就可以直接從緩存中返回空值,而不需要訪問數據庫。
  • 布隆過濾器:使用布隆過濾器來過濾掉不存在的數據請求。布隆過濾器是一種空間效率極高的概率型數據結構,可以判斷一個元素是否存在于集合中。雖然存在一定的誤判率,但可以通過調整參數來降低誤判率。
  • 接口校驗:在訪問數據庫之前,先對請求進行校驗,過濾掉明顯不合法的請求。

三、緩存雪崩(Cache Avalanche)

定義:緩存雪崩是指大量緩存數據在同一時間過期或緩存服務器宕機,導致大量請求直接落到數據庫上,造成數據庫壓力驟增甚至宕機。緩存雪崩通常是由于緩存數據的過期時間設置過于集中或緩存服務器故障導致的。

特點

  • 大量數據過期:大量緩存數據在同一時間過期。
  • 緩存服務器故障:緩存服務器宕機或不可用。
  • 請求激增:大量請求直接落到數據庫上,導致數據庫壓力驟增。

解決方案

  • 過期時間分散:為緩存數據設置不同的過期時間,避免大量數據在同一時間過期。可以使用隨機數或哈希算法來分散過期時間。
  • 高可用緩存集群:搭建高可用的緩存集群,確保緩存服務器的高可用性。可以使用 Redis Sentinel 或 Redis Cluster 等技術來實現。
  • 限流與降級:在緩存服務不可用時,通過限流和降級策略來減少對數據庫的沖擊。例如,可以限制訪問數據庫的并發數,或者返回預設的降級數據。
  • 多級緩存:引入多級緩存機制,如本地緩存(如 Ehcache)與分布式緩存(如 Redis)相結合,提高緩存的可用性和響應速度。

總結

  • 緩存擊穿:針對熱點數據緩存過期或不存在時,大量請求直接訪問數據庫。解決方案包括互斥鎖、永不過期、邏輯過期等。
  • 緩存穿透:查詢不存在的數據,導致大量請求直接訪問數據庫。解決方案包括緩存空值、布隆過濾器、接口校驗等。
  • 緩存雪崩:大量緩存數據過期或緩存服務器故障,導致大量請求直接落到數據庫上。解決方案包括過期時間分散、高可用緩存集群、限流與降級等。

在實際應用中,應根據具體情況選擇合適的解決方案,并結合監控和告警機制,及時發現并處理緩存問題,確保系統的穩定性和性能。

我正在程序員刷題神器面試鴨上高效準備面試,9000+ 高頻面試真題、800 萬字優質題解,覆蓋主流編程方向,跟我一起刷原題、過面試:
點擊進入

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

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

相關文章

RabbitMQ配置環境變量

一、RabbitMQ下載 1、從官網下載 在官網中下載,適合自己電腦的版本。我直接下載的windows版本。 然后下載opt這個軟件這個版本適合3.6.3的RabbitMQ,點擊藍色的字體即可下載。 2、安裝erlang 當你雙擊安裝程序并進入安裝向導后,會看到這樣…

基于vue框架的東莞市二手相機交易管理系統5yz0u(程序+源碼+數據庫+調試部署+開發環境)帶論文文檔1萬字以上,文末可獲取,系統界面在最后面。

系統程序文件列表 項目功能:用戶,相機分類,二手相機 開題報告內容 基于FlaskVue框架的東莞市二手相機交易管理系統開題報告 一、研究背景與意義 1.1 研究背景 隨著數字技術的迅猛發展和攝影文化的廣泛普及,相機已成為人們記錄生活、表達創意的重要工…

dify調用Streamable HTTP MCP應用

一、概述 上一篇文章,介紹了使用python開發Streamable HTTP MCP應用,鏈接:https://www.cnblogs.com/xiao987334176/p/18872195 接下來介紹dify如何調用MCP 二、插件 安裝插件 需要安裝2個插件,分別是:Agent 策略(支持 …

筆記:將一個文件服務器上的文件(一個返回文件數據的url)作為另一個http接口的請求參數

筆記:將一個文件服務器上的文件(一個返回文件數據的url)作為另一個http接口的請求參數 最近有這么個需求,需要往某一個業務的外部接口上傳文件信息,但是現在沒有現成的文件,只在數據庫存了對應的url&#…

如何在 FastAPI 中合理使用 Pydantic 的 Alias

下面的內容是我跟 Gemini 2.5 Pro 探討關于Pydantic 的 Alias 問題之后,讓它總結的一篇技術博客。 我已經有很長一段時間沒有好好寫技術類的博客了,這就是原因。 可以在 https://panzhixiang.cn/ 查看更多我的博客,有技術的,也有很…

CAU人工智能class4 批次歸一化

歸一化 在對輸入數據進行預處理時會用到歸一化,將輸入數據的范圍收縮到0到1之間,這有利于避免綱量對模型訓練產生的影響。 但當模型過深時會產生下述問題: 當一個學習系統的輸入分布發生變化時,這種現象稱之為“內部協變量偏移”…

動態庫和靜態庫詳解

庫其實就是個文件 下面是文件后綴 靜態庫:.a(linux) .lib(windows) 動態庫:.so(linux) .dll(windows) 靜態庫的制作 ar -rc libmystdio.a my_stdio.o my_string.o ar是歸檔工具,rc表示replace和create,ar跟tar有點…

PDF 文檔結構化工具對比:Marker 與 MinerU

模型訓練數據-MinerU一款Pdf轉Markdown軟件 https://codeyuan.blog.csdn.net/article/details/144315141 在當前大模型(LLM)和自然語言處理(NLP)應用快速發展的背景下,如何高效地將 PDF 等非結構化文檔轉換為結構化數…

shp2pgsql 導入 Shp 到 PostGIS 空間數據庫

前言 ? shp2pgsql是PostGIS自帶的命令行工具,用于將Shapefile文件聲稱SQL腳本導入到PostGIS空間數據庫。 1. 安裝 PostGIS 通過Application Stack Builder或者下載單獨的PostGIS包進行安裝。而shp2pgsql則是與PostGIS工具集成在一起,無需單獨下載。該命…

【ISP算法精粹】什么是global tone mapping和local tone mapping?

1. 簡介 全局色調映射(Global Tone Mapping)和局部色調映射(Local Tone Mapping)是高動態范圍(HDR)圖像處理中的兩種關鍵技術,用于將高動態范圍圖像的亮度值映射到標準動態范圍(LDR…

虛擬環境中VSCode運行jupyter文件

用VS Code打開jupyter文件,點擊右上角 Select Kernel 在正上方會出現這個選擇框,選擇 Python Environment 會出來所有的虛擬環境,選擇要用的環境行

如何計算VLLM本地部署Qwen3-4B的GPU最小配置應該是多少?多人并發訪問本地大模型的GPU配置應該怎么分配?

本文一定要閱讀我上篇文章!!! 超詳細VLLM框架部署qwen3-4B加混合推理探索!!!-CSDN博客 本文是基于上篇文章遺留下的問題進行說明的。 一、本文解決的問題 問題1:我明明只部署了qwen3-4B的模型…

antv/g6 圖譜封裝配置(二)

繼上次實現圖譜后,后續發現如果要繼續加入不同樣式的圖譜實現起來太過麻煩,因此考慮將配置項全部提取封裝到js文件中,圖譜組件只專注于實現各種不同的組件,其中主要封裝的點就是各個節點的橫坐標(x),縱坐標…

從芯片互連到機器人革命:英偉達雙線出擊,NVLink開放生態+GR00T模型定義AI計算新時代

5月19日,在臺灣舉辦的Computex 2025上,英偉達推出新技術“NVLink Fusion”,允許非英偉達CPU和GPU,同英偉達產品以及高速GPU互連技術NVLink結合使用,加速AI芯片連接。新技術的推出旨在保持英偉達在人工智能開發和計算領…

Qt window frame + windowTitle + windowIcon屬性(3)

文章目錄 window frame屬性window frame的概念1. window frame的影響2. 圖片演示3. 代碼演示 API接口widget.cpp(測試代碼) windowTitle屬性API接口問題 注意點widget.cpp(屬性用法) windowIcon屬性API接口啥是窗口圖標玩法1. 先…

Git 分支管理:merge、rebase、cherry-pick 的用法與規范

Git 分支管理:merge、rebase、cherry-pick 的用法與規范 在團隊開發和個人項目中,合理管理 Git 分支至關重要。merge、rebase 和 cherry-pick 是最常用的三種分支操作命令。本文將介紹它們的基本用法、適用場景及最佳實踐規范,幫助大家更高效…

VR全景制作方法都有哪些?需要注意什么?

VR全景制作是將線下實景場景轉化為具有沉浸式體驗的全景圖像的相關技術流程。通過圖像處理和軟件拼接等手段及技術,可以制作出VR全景圖。后面,我們科普詳細的VR全景制作方法指南,順便介紹眾趣科技在相關領域提供的支持方案。 選定拍攝地點與準…

計算機系統結構1-3章節 期末背誦內容

Amdahl定律: 加快某部件執行速度所能獲得的系統性能加速比,受限于該部件的執行時間占系統中總執行時間的百分比。 加速比依賴于: 可改進比例:在改進前的系統中,可改進部分的執行時間在總的執行時間中所占的比例。 部件加速比:可改…

JS實現直接下載PDF文件

pdf文件通過a標簽直接下載會打開頁面,所以,請求該文件的blob文件流數據,再通過window.URL.createObjectURL轉成鏈接,就可以直接下載了。 只需要替換url和文件名稱就行,文件名的后綴記得要寫上pdf,不然會變成…

深度解析Pytest中Fixture機制與實戰案例

一、為什么我們需要Fixture? 在某次金融系統重構項目中,我們的測試團隊曾遇到這樣的困境:隨著測試用例增長到500,使用unittest框架編寫的測試代碼出現了嚴重的維護問題——setup方法臃腫不堪,測試數據混亂&#xff0c…