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

引言

要了解緩存的這幾個相關問題,我們先以一個例子來引入:

有一個get請求:

api/news/getById/1

正常情況下對其申請訪問的流程如圖:

但若是如此,訪問增多或者受到攻擊時很容易受到以下問題

1 緩存穿透

1.1 造成原因

當查詢一個不存在的數據時,MySQL查詢不到數據,也不會直接寫入緩存,導致每次請求都會查詢數據庫

1.2 解決方案

1.2.1 方案一 緩存空數據

緩存空數據,查詢返回的數據為空,仍將該結果保存,也就是保存null數據

優點:簡單

缺點:消耗內存,且當數據庫中的數據更新后,可能使得緩存與數據庫中的數據不一致

1.2.2 方案二 布隆過濾器

先解釋一個概念:bitmap(位圖)

bitmap相當于一個以bit為單位組成的數組,每個單元只能存儲二進制數0或1

布隆過濾器作用:檢索一個元素是否在一個集合中

比如:

但是當數組大小有限時,就會出現類似哈希沖突的問題:

此時可以發現,如果id為3的數據不存在時,用布隆過濾器時會造成誤判

可以得出,數組越大,布隆過濾器誤差越小,但同時帶來更多的內存消耗

如何調整其誤判率呢?

可以通過Redisson或者Guava來設置誤判率,通常將誤判率設置在5%以下

2 緩存擊穿

2.1 造成原因

給某個key設置了過期時間,當該key過期時,恰好對其有大量并發請求,這些并發請求可能瞬間將數據庫壓垮

2.2 解決方案

2.2.1 方案一 互斥鎖

特點:數據強一致性能差,可在銀行系統中使用

2.2.2 方案二 邏輯過期

特點高可用,但不能保證數據完全一致

? ? ? ? ? ?性能優,可在秒殺功能中使用

3 緩存雪崩

3.1 造成原因

同一時段大量key同時失效或Reids服務器宕機,導致大量請求到達數據庫,給數據庫帶來巨大壓力

3.2 解決方案

1.給不同key的TTL添加隨機值

2.利用Redis集群提高服務可用性,如哨兵模式和集群模式

3.給緩存業務添加降級限流策略,如nginx或spring cloud gateway

4.給業務添加多級緩存,如Guava或Caffeine

給緩存業務添加降級限流策略可作為保底策略,穿透、擊穿、雪崩均適用

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

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

相關文章

打造一款高穩定、低延遲、跨平臺RTSP播放器的技術實踐

一、引言 RTSP(Real Time Streaming Protocol)作為經典的實時流媒體協議,已經深深嵌入到安防監控、遠程教育、工業巡檢、低空經濟、醫療影像傳輸等行業之中,可以說是這些場景的視頻傳輸“基礎設施”。一個穩定的 RTSP 播放器&…

C++_數據結構

數據結構是計算機存儲、組織數據的方式,它使得數據能夠被高效地訪問和修改。根據數據元素之間關系的不同特性,數據結構可以分為多種類型。主要可以分為兩大類:邏輯結構和物理結構(也稱存儲結構)。 一、邏輯結構&#x…

一個正常的 CSDN 博客賬號,需要做哪些基礎準備?

一個正常的 CSDN 博客賬號,需要做哪些準備? CSDN(中國軟件開發網)作為國內最具影響力的技術社區之一,不僅是開發者獲取信息的重要平臺,也是技術人建立個人品牌、輸出知識、積累影響力的重要陣地。想要把一…

【Python基礎】 17 Rust 與 Python 運算符對比學習筆記

一、算術運算符運算符Rust 🦀Python 🐍示例 (Rust)示例 (Python)說明加法加法let sum 5 3;sum 5 3-減法減法let diff 5 - 3;diff 5 - 3*乘法乘法let product 5 * 3;product 5 * 3/除法除法let quotient 5 / 3; → 1quotient 5 / 3 → 1.666...…

單鏈表逆序java

在Java中實現單鏈表的逆序,可以通過迭代或遞歸兩種方式。以下是兩種方法的詳細實現: 1. 迭代方法(推薦) public class ListNode {int val;ListNode next;ListNode(int x) { val x; } }class Solution {public ListNode reverseLi…

(11)用于無GPS導航的制圖師SLAM(二)

文章目錄 前言 7 構建軟件包 8 開始制圖 9 配置 ArduPilot 10 測試 11 視頻 前言 本頁展示了如何使用 RPLidarA2 激光雷達(RPLidarA2 lidar)設置 ROS 和 Google Cartographer SLAM,為 ArduPilot 提供本地位置估計,使其可以在沒有 GPS 的情況下運行…

1.5、機器學習-回歸算法

1、線性回歸模型 線性回歸模型(Liner Regression),是利用線性擬合的方式來探尋數據背后的規律。通過搭建線性回歸模型,可以尋找這些散點(也稱樣本點)背后的趨勢線(也稱回歸曲線)。 借助回歸曲線,我們可以進行一些簡單…

eclipse 安裝 lombok

好久沒有用eclipse,新裝eclipse 發現lombok 沒有生效,如下安裝最省事,無需安裝plugin等。 進入maven 本地目錄,如:org\projectlombok\lombok\1.18.38,點擊lombok jar文件指定eclipse 目錄,安裝完…

linux離線安裝elasticsearch8.19.3

下載: 官網多版本下載: Past Releases of Elastic Stack Software | Elastic github多版本下載: https://github.com/elastic/elasticsearch/releases 上傳后解壓到當前目錄 tar -zxvf elasticsearch-8.19.3-linux-x86_64.tar.gz 或指定解壓目錄 tar -xzf elasticsearch-8…

Uniapp中進行微信小程序頭像和昵稱的更改

一、官方文檔: 1、wx.getUserInfo(uni.getUserInfo):基礎庫版本低于2.27.1可用 ① 文檔鏈接: https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.htmlhttps://uniapp.dclou…

交換機詳細

交換機(Sritch):一種用于電(光)信號轉發的網絡設備,可以為接入交換機的任意兩個網絡節點提供獨享的電信號通路。解決什么問題?多臺設備之間的數據交換的問題。因此根據它的功能,它通…

功能強大的多線程端口掃描工具,支持批量 IP 掃描、多種端口格式輸入、掃描結果美化導出,適用于網絡安全檢測與端口監控場景

工具介紹 PortScanner - 多線程端口掃描工具,一款功能強大的多線程端口掃描工具,支持批量 IP 掃描、多種端口格式輸入、掃描結果美化導出,適用于網絡安全檢測與端口監控場景。🌟 功能特性 🔍 靈活的掃描目標&#xff1…

【OpenHarmony文件管理子系統】文件訪問接口mod_fileio解析

OpenHarmony文件訪問接口mod_fileio解析 概述 mod_fileio模塊是OpenHarmony文件管理API中的核心模塊之一,提供了完整的文件I/O操作功能。該模塊基于Node.js N-API構建,為JavaScript應用提供了豐富的文件系統操作接口,包括文件讀寫、目錄操作、…

js逆向Webpack模塊加載機制解析:從數組到JSONP

1. 概述 Webpack作為現代前端開發中最流行的模塊打包工具,其模塊加載機制值得深入理解。本文將解析Webpack的幾種模塊加載方式,包括數組形式、鍵值對形式和JSONP動態加載。只有理解了它的相關加載機制,我們才可以進行逆向工作。 2. 數組形式的…

Joplin-解決 Node.js 中 “digital envelope routines::unsupported“ 錯誤

解決 Node.js 中 “digital envelope routines::unsupported” 錯誤 在使用 Webpack 構建 Joplin 插件時,你可能會遇到 error:0308010C:digital envelope routines::unsupported 錯誤。這個錯誤看起來很復雜,但實際上有明確的原因和解決方案。 錯誤原因…

UE5 UAT

通過UAT 打包的流程&#xff0c;先整理這么點入口// Engine\Source\Programs\AutomationTool\Program.cs /// <summary> /// Main entry point /// </summary> public partial class Program {public static async Task<int> Main(string[] Arguments){Logge…

Python帶狀態生成器完全指南:從基礎到高并發系統設計

引言&#xff1a;狀態化生成器的核心價值在復雜系統開發中&#xff0c;帶狀態的生成器是處理復雜邏輯的核心工具。根據2024年Python開發者調查報告&#xff1a;78%的狀態機實現使用帶狀態生成器85%的數據管道依賴狀態化生成器92%的并發系統需要狀態管理65%的算法優化通過狀態化…

Python元組:不可變但靈活的數據容器

Python元組&#xff1a;不可變但靈活的數據容器 元組(tuple)是Python中一種不可變(immutable)但功能靈活的有序集合數據類型&#xff0c;具有以下核心特性&#xff1a;一、基本特性 不可變性?&#xff1a;創建后不能修改元素&#xff08;增刪改操作均不允許&#xff09; 有序存…

FastGPT源碼解析 Agent 大模型對接接口和使用詳解

FastGPT 大模型對接核心代碼分析 核心架構概覽 FastGPT 采用統一模型抽象層設計&#xff0c;通過標準化接口對接多種大模型&#xff0c;支持 LLM、Embedding、ReRank、TTS、STT 等多種 AI 能力。 支持各種大模型能力的配置&#xff0c;包括本地ollama、各個AI云廠商的API接入配…

AI Compass前沿速覽:Kimi K2、InfinityHuman-AI數字人、3D-AI桌面伴侶、疊疊社–AI虛擬陪伴

AI Compass前沿速覽&#xff1a;Kimi K2、InfinityHuman-AI數字人、3D-AI桌面伴侶、疊疊社–AI虛擬陪伴 AI-Compass 致力于構建最全面、最實用、最前沿的AI技術學習和實踐生態&#xff0c;通過六大核心模塊的系統化組織&#xff0c;為不同層次的學習者和開發者提供從完整學習路…