Redis緩存三大經典問題:雪崩、穿透、擊穿詳解

????????在高并發系統中,Redis作為高性能的內存緩存數據庫,緩存可能會引發一系列嚴重問題——緩存雪崩、緩存穿透、緩存擊穿

一、緩存雪崩(Cache Avalanche)

1. 什么是緩存雪崩?

????????緩存雪崩是指大量緩存數據在同一時間集中失效,導致所有請求直接打到后端數據庫,數據庫瞬間承受巨大壓力,甚至可能被壓垮。

2. 典型場景

緩存服務器宕機或重啟。

大量熱點數據設置了相同的過期時間,同時失效。

Redis集群出現網絡分區或主從切換失敗。

3. 解決方案

設置不同的過期時間

????????避免所有緩存同時失效。可以在基礎過期時間上增加一個隨機值。

多級緩存架構

????????使用 本地緩存 + Redis 的多級緩存策略。即使Redis失效,本地緩存仍可緩解部分壓力。

服務降級與熔斷

????????當數據庫壓力過大時,可臨時返回默認值或友好提示,保護核心服務。

高可用部署

????????Redis使用主從 + 哨兵Redis Cluster集群模式。

????????數據持久化(RDB+AOF)防止數據丟失。

預熱緩存

????????系統上線或重啟后,提前加載熱點數據到緩存,避免冷啟動時直接沖擊數據庫。

二、緩存穿透

1. 什么是緩存穿透?

????????緩存穿透是指查詢一個數據庫中根本不存在的數據,由于緩存中沒有,每次請求都會穿過緩存直達數據庫,導致數據庫壓力劇增。

2. 攻擊場景

????????惡意用戶或爬蟲頻繁查詢不存在的ID,造成數據庫負載飆升。

3. 解決方案

緩存空值

????????即使查詢結果為空,也緩存一個特殊值(如 null"empty"),并設置較短過期時間。

布隆過濾器

在訪問緩存前,先通過布隆過濾器判斷數據是否存在。

????????優點:空間效率高,查詢速度快。

????????缺點:存在極低的誤判率(可能把不存在的判為存在),但不會漏判。

接口層校驗

????????對請求參數進行合法性校驗,如ID格式、范圍限制、權限驗證等,提前攔截非法請求。

三、緩存擊穿

1. 什么是緩存擊穿?

????????緩存擊穿是指某個熱點數據在緩存中過期的瞬間,大量并發請求同時涌入,直接訪問數據庫,造成數據庫瞬時壓力激增。

與雪崩的區別:雪崩是大量key同時失效;擊穿是單個熱點key失效。

2. 典型場景

????????突發新聞、秒殺商品、熱門視頻等熱點數據過期。

????????高并發下多個線程同時發現緩存失效,同時查詢數據庫。

3. 解決方案

互斥鎖

????????當緩存失效時,只允許一個線程去加載數據庫,其他線程等待。

邏輯過期

????????不設置Redis的物理過期時間,而是將過期時間作為數據的一部分存儲:

永不過期(慎用)

????????對極端熱點數據設置永不過期,通過后臺任務定期更新緩存。

四、總結

問題觸發條件影響范圍解決方案
緩存雪崩大量key同時失效全局性,系統級風險隨機過期時間、多級緩存、高可用
緩存穿透查詢不存在的數據針對特定非法請求緩存空值、布隆過濾器、參數校驗
緩存擊穿熱點key失效瞬間單個熱點數據互斥鎖、邏輯過期、永不過期

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

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

相關文章

后端Web實戰-刪除修改

目錄 1.刪除員工 1.1.1 需求 1.1.2 接口文檔 1.1.3 思路分析 1.1.4 功能開發 1.1.4.1 Controller接收參數 1.1.4.2 Service 1.1.4.3 Mapper 1.1.5 功能測試 1.1.6 前后端聯調 2.修改員工 2.1 查詢回顯 2.1.1 接口文檔 2.1.2 實現思路 2.1.3 代碼實現 2.1.4 方式…

VNC連接服務器實現遠程桌面-針對官方給的鏈接已經失效問題

按照官方給的鏈接在安裝包的時候找不到鏈接,原鏈接可能已經失效新鏈接# 下載 libjpeg-turbo 官方 debwget --no-proxy "https://sourceforge.net/projects/libjpeg-turbo/files/2.0.90%20(2.1%20beta1)/libjpeg-turbo-official_2.0.90_amd64.deb/download"…

Docker在Windows與Linux系統安裝的一體化教學設計

Docker跨平臺安裝實訓課程設計 一、課程定位 本實訓課程面向計算機應用技術、云計算技術與應用等專業學生,通過對比學習Docker在Windows和Linux兩大主流操作系統上的安裝與配置方法,幫助學生掌握容器化技術的基礎環境搭建能力,為后續的容器管…

c++多線程(1)------創建和管理線程td::thread

操作系統:ubuntu22.04 IDE:Visual Studio Code 編程語言:C11 算法描述 std::thread 是 C11 標準庫中用于創建和管理線程的核心類,定義在 頭文件中。它使得多線程編程變得簡單、類型安全且跨平臺。 一、std::thread 簡介 std::thread 是一個類…

Flutter環境搭建全攻略之-windows環境搭建

一,Flutter 官網:https://flutter.dev Flutter Packages官網:https://pub.dev 二,Windows 上面搭建Flutter Android運行環境 對應軟件可以聯系客服,或者網盤里面下載 1,Flutter Android環境搭建&#xff1a…

《Docker 零基礎入門到實戰:容器化部署如此簡單,運維效率直接拉滿》

相信你對封面圖上的「Docker 鯨魚」圖標并不陌生 —— 它正是解決「開發環境能跑,生產環境崩了」的容器化神器!Docker 通過打包應用與依賴到輕量容器,實現了「一次構建,到處運行」,徹底消除環境不一致的痛點。本文從 D…

Spring Security 深度學習(六): RESTful API 安全與 JWT

目錄 1. 引言:無狀態認證的崛起2. JWT (JSON Web Token) 核心概念2.1 什么是JWT?2.2 JWT的組成:Header, Payload, Signature2.3 JWT的工作原理2.4 JWT的優缺點與適用場景 3. Spring Security中的JWT集成策略3.1 禁用Session管理與CSRF防護3.2…

無名信號量

include <myhead.h> oid *task( void *file_size)int file_size1*(int*)file_size;//打開源文件int fdopen("./hello",O_RDONLY);if(fd-1){perror("open error\n");return NULL;}//打開目標文件int fd1open("./world",O_WRONLY);if(fd1-1)…

免費CRM系統與Excel客戶管理的區別

很多中小企業在客戶管理初期&#xff0c;會選擇使用Excel表格進行客戶數據的整理與維護。但隨著業務規模擴大&#xff0c;客戶信息日益復雜&#xff0c;Excel逐漸暴露出諸多局限性。此時&#xff0c;免費CRM系統應運而生&#xff0c;成為企業客戶管理升級的重要選擇。本文將深入…

linux Nginx服務配置介紹,和配置流程

1、Nginx 配置介紹認識Nginx服務的主配置文件 nginx.confnginx的配置文件一般在 /usr/local/nginx/conf/下&#xff0c;然后直接vim nginx.com 即可編輯1.1 全局配置介紹全局配置位于主配置文件最頂部&#xff0c;作用于整個Nginx服務進程&#xff0c;影響服務的資源分配、運行…

文字識別接口-文字識別技術-ocr api

文字識別接口&#xff0c;顧名思義&#xff0c;就是一種將圖像文字或手寫文字轉換為可編輯文本的技術。文字識別接口&#xff0c;基于深度學習算法與自主ocr核心實現多種場景字符的高精度識別與結構化信息提取&#xff0c;現已被廣泛應用于銀行、醫療、財會、教育等多個領域。隨…

DeepSeek R1大模型微調實戰-llama-factory的模型下載與訓練

文章目錄概要1.下載模型2.llama factory 訓練模型2.1 模型微調2.2 模型評估2.3 模型對話2.4 導出模型3.硬件選擇概要 LLaMA Factory 是一個簡單易用且高效的大型語言模型訓練與微調平臺。通過它&#xff0c;用戶可以在無需編寫任何代碼的前提下&#xff0c;在本地完成上百種預…

C++ map和set

C參考文獻&#xff1a;cplusplus.com - The C Resources Network 目錄 一、序列式容器和關聯式容器 二、set系列 &#xff08;1&#xff09;set類的介紹 &#xff08;2&#xff09;set的構造和迭代器 &#xff08;3&#xff09;set的接口 1.insert?編輯 2.find和erase 3…

頭一次見問這么多kafka的問題

分享一篇粉絲朋友整理的面經&#xff0c;第一次遇見問那么多kafka的問題&#xff0c;看看他是怎么回答的。 先來看看 職位描述&#xff1a; 崗位職責&#xff1a; 負責基于 Go 的后端服務的設計、開發和維護&#xff1b;參與系統架構設計&#xff0c;確保系統的高可用性、高性能…

自底向上了解CPU的運算

文章目錄 引言 CPU如何實現邏輯運算 NMOS和PMOS 基于MOS管組合下的邏輯門運算 邏輯運算下運算的實現 ALU的誕生 CPU的誕生 關于二進制運算的研究 十進制轉二進制基礎換算 為什么負數要使用補碼進行表示 為什么反碼就能解決正負數相加問題,我們還需要用補碼來表示負數呢? 小數…

apache poi與Office Open XML關系

以下內容來自AI https://ecma-international.org/publications-and-standards/standards/ecma-376/ 官方規范 https://poi.apache.org/components/oxml4j/index.html java中針對Office Open XML的實現 Apache poi中各個組件 https://poi.apache.org/components/index.html …

S32K328上芯片內部RTC的使用和喚醒配置

1&#xff1a;RTC介紹 1.1 RTC基礎功能介紹 參考《S32K3xx Reference Manual》&#xff0c;S32K328芯片內部自帶RTC功能&#xff0c;并且支持從低功耗狀態下喚醒設備&#xff1b;1.2 RTC電源介紹 由以下三張圖可知 1&#xff1a;RTC由V11供電&#xff0c;V11依賴外部V15供電&am…

【Python】數據可視化之分類圖

目錄 條形圖 箱形圖 散點圖 分簇散點圖 小提琴 分簇小提琴 條形圖 條形圖是一種直觀的圖表形式&#xff0c;它通過不同長度的矩形條&#xff08;即“條形”&#xff09;來展示數值變量的中心趨勢估計值&#xff0c;其中每個矩形的高度直接對應于該組數據的某個中心量度&…

RabbitMQ模型詳解與常見問題

項目demo地址&#xff1a;https://github.com/tian-qingzhao/rabbitmq-demo 一、RabbitMQ組件概念 1.1 Server&#xff1a;接收客戶端的連接&#xff0c;實現AMQP實體服務。 1.2 Connection&#xff1a;連接 應用程序與Server的網絡連接&#xff0c;TCP連接。 1.3 Channel&…

網絡:相比于HTTP,HTTPS協議到底安全在哪?

網絡&#xff1a;相比于HTTP&#xff0c;HTTPS協議到底安全在哪&#xff1f; 我們知道HTTPS也是一種應用層協議&#xff0c;它在HTTP的基礎上有一層加密&#xff0c;因為HTTP的數據傳輸都是以明文方式傳輸的&#xff0c;所以加密主要是為了防止數據在傳輸的時候被篡改 今天我…