当前位置: 首页 > news >正文

理清缓存穿透、缓存击穿、缓存雪崩、缓存不一致的本质与解决方案

在构建高性能系统中,缓存(如Redis) 是不可或缺的关键组件,它大幅减轻了数据库压力、加快了响应速度。然而,在高并发环境下,缓存也可能带来一系列棘手的问题,如:缓存穿透、缓存击穿、缓存雪崩、缓存不一致

这些问题听起来名字相似,容易混淆。今天这篇文章,就带大家系统地理解它们的本质区别、发生场景及最佳实践方案


🧩 一图总览

问题类比本质场景是否打DB解决方案
缓存穿透故意找错门请求的是不存在的key用户请求id=-1✅ 每次布隆过滤器、空值缓存
缓存击穿热门商品钥匙丢了热点缓存突然失效秒杀详情失效瞬间访问量激增✅ 高并发打DB加锁、逻辑过期
缓存雪崩大楼停电大量缓存同时失效设置了相同TTL✅ 大规模打DB过期时间加随机值、限流
缓存不一致仓库和门市不同步缓存与数据库更新顺序错误先更新DB再删缓存,删失败✅ 数据错误先删缓存后更新、消息队列

1️⃣ 缓存穿透(Cache Penetration)

📌 本质

指的是请求的数据在缓存和数据库中都不存在,导致每次都穿透缓存打到数据库。

🎯 场景

  • 用户频繁访问不存在的 userId,如:userId = -1

  • 恶意攻击脚本请求随机字符串ID,绕过缓存打数据库

✅ 解决方案

  • 布隆过滤器:构建合法key集合,提前拦截非法请求

  • 空值缓存:对查询结果为空也做短期缓存,避免重复查询

    if (result == null) {redis.set(key, "null", 60); // 缓存空值1分钟
    }
    

2️⃣ 缓存击穿(Cache Breakdown)

📌 本质

某个热点数据在失效瞬间被高并发请求,造成短时间内大量请求直击数据库。

🎯 场景

  • 秒杀系统中某商品详情缓存5分钟,到期那一刻被数万用户请求。

✅ 解决方案

  • 互斥锁:只有一个线程可以查询DB并刷新缓存,其他等待

  • 逻辑过期:缓存中放入“过期时间”,即使过期,旧数据仍返回,由后台线程异步刷新缓存(常见于百度方案)


3️⃣ 缓存雪崩(Cache Avalanche)

📌 本质

大量缓存在同一时间过期,大量请求并发击穿缓存,压垮数据库。

🎯 场景

  • 代码里为所有缓存设置了固定TTL 30分钟,30分钟后集体过期。

✅ 解决方案

  • 过期时间加随机值,错开失效时间

    int ttl = 1800 + RandomUtils.nextInt(300); // 1800±300秒
    redis.set(key, value, ttl);
    
  • 预热缓存机制:启动时提前加载核心数据

  • 限流与熔断机制:保护后端服务


4️⃣ 缓存不一致(Cache Inconsistency)

📌 本质

缓存和数据库中的数据不一致,通常由于更新顺序或更新失败导致。

🎯 场景

  • 先更新数据库,再删除缓存,结果删除失败导致缓存是旧值。

  • 多线程并发写数据时,缓存更新被覆盖。

✅ 解决方案

  • 先删除缓存,再更新数据库(防止“读旧数据”)

  • 延迟双删策略:更新数据库后延迟再删一次缓存

    // 1. 删除缓存
    redis.del(key);// 2. 更新数据库
    db.update(data);// 3. 延迟再删(可用线程池延迟执行)
    Thread.sleep(1s);
    redis.del(key);
    
  • 消息队列异步更新缓存:更新后推送事件,由缓存服务更新


✅ 总结口诀

为了方便记忆,这里提供一句口诀:

穿透找不到,击穿太热闹,雪崩全失效,不一致顺序错。


📌 结语

缓存是提高系统性能的重要手段,但随之也带来了种种挑战。我们在设计系统时,应该对上述四种情况都有应对策略,避免因缓存问题造成服务雪崩、数据异常甚至系统崩溃。

欢迎收藏本篇文章,作为缓存容错设计的备查手册。🚀

相关文章:

理清缓存穿透、缓存击穿、缓存雪崩、缓存不一致的本质与解决方案

在构建高性能系统中,缓存(如Redis) 是不可或缺的关键组件,它大幅减轻了数据库压力、加快了响应速度。然而,在高并发环境下,缓存也可能带来一系列棘手的问题,如:缓存穿透、缓存击穿、…...

Jetpack Compose 自定义 Slider 完全指南

自定义 Compose Slider 在 Jetpack Compose 中,你可以通过多种方式自定义 Slider 组件。以下是一些常见的自定义方法: 基本自定义 var sliderPosition by remember { mutableStateOf(0f) }Slider(value sliderPosition,onValueChange { sliderPosit…...

荣耀A8互动娱乐组件部署实录(终章:后台配置系统与整体架构总结)

作者:被配置文件的“开关参数”折磨过无数次的运维兼后端工 一、后台系统架构概述 荣耀A8组件后台采用 PHP 构建,配合 MySQL 数据库与 Redis 缓存系统,整体结构遵循简化版的 MVC 模式。后台主要实现以下核心功能: 系统参数调控与配置热更新 用户管理(封号、授权、角色) …...

本地文件批量切片处理与大模型精准交互系统开发指南

本地文件批量切片处理与大模型精准交互系统开发指南 一、系统架构设计 #mermaid-svg-yCbT2xBukW6iX98y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-yCbT2xBukW6iX98y .error-icon{fill:#552222;}#mermaid-svg-y…...

homebrew安装配置Python(MAC版)

Mac系统自带python路径为: /System/Library/Frameworks/Python.framework/Versionbrew 安装 Python3 在终端输入以下命令: brew search python3 # 查看支持安装的版本 brew install python3就可以轻松easy安装python了,安装完成后提示 查看 pyth…...

STM32--RCC--时钟

教程 系统时钟 RCC RCC(Reset and Clock Control)是STM32微控制器中管理时钟和复位系统的关键外设模块,负责整个芯片的时钟树配置和复位控制。 RCC主要功能 时钟系统管理: 内部/外部时钟源选择 时钟分频/倍频配置 各外设时钟门…...

深度学习在油气地震资料反卷积中的应用

深度学习在油气地震资料反卷积中的应用 基本原理 在油气地震勘探中,反卷积(Deconvolution)是一种重要的信号处理技术,用于提高地震资料的分辨率。传统方法(如维纳滤波、预测反卷积等)存在对噪声敏感、假设条件严格等局限。深度学习方法通过数据驱动的方…...

实现滑动选择器从离散型的数组中选择

1.使用原生的input 详细代码如下&#xff1a; <template><div class"slider-container"><!-- 滑动条 --><inputtype"range"v-model.number"sliderIndex":min"0":max"customValues.length - 1"step&qu…...

基于 GO 语言的 Ebyte 勒索软件——简要分析

一种新的勒索软件变种,采用Go 语言编写,使用ChaCha20进行加密,并使用ECIES进行安全密钥传输,加密用户数据并修改系统壁纸。其开发者EvilByteCode曾开发过多种攻击性安全工具,现已在 GitHub 上公开 EByte 勒索软件。尽管该勒索软件声称仅用于教育目的,但滥用可能会导致严重…...

学习人工智能开发的详细指南

一、引言 人工智能&#xff08;AI&#xff09;开发是一个充满挑战与机遇的领域&#xff0c;它融合了数学、计算机科学、统计学、认知科学等多个学科的知识。随着大数据、云计算和深度学习技术的快速发展&#xff0c;AI已经成为推动社会进步和产业升级的关键力量。本文将为初学…...

使用图像生成式AI和主题社区网站助力运动和时尚品牌的新产品设计和市场推广的点子和实现

通过构建针对公司产品线的专有图像生成式AI模型&#xff0c;用户可以将自己对于产品的想法和偏好&#xff0c;变成设计发布到社区空间中与社区分享&#xff0c;也可以通过在产品经典款或使用社区空间中其它人的创作来重新设计。组织大型市场推广活动来宣传DIY设计理念&#xff…...

POI创建Excel文件

文章目录 1、背景2、创建表格2.1 定义表头对象2.2 Excel生成器2.3 创建模板2.4 处理Excel表头2.5 处理Excel内容单元格样式2.6 处理单个表头 3、追加sheet4、静态工具5、单元测试6、完整代码示例 1、背景 需求中有需要用户自定义Excel表格表头&#xff0c;然后生成Excel文件&a…...

CentOS虚拟机固定ip以及出现的问题

1.打开终端&#xff0c;进入网卡配置目录&#xff1a; cd etc/sysconfig/network-scripts 2.找到网卡配置文件&#xff0c;我这里是 ifcfg-ens32&#xff08;替换成你自己的文件&#xff09; 4.进入ifcfg-ens32&#xff0c;注释IPV6&#xff0c;修改别的参数如下图 TYPEEther…...

【Python】常用命令提示符

Python常用的命令提示符 一、Python环境基础命令【Windows】 于Windows环境下&#xff0c;针对Python&#xff0c;在CMD&#xff08;命令提示符&#xff09;常用的命令以及具体用法&#xff0c;怎么用&#xff1b;   主要包含&#xff1a;运行脚本、包管理、虚拟环境、调试与…...

Java引用RabbitMQ快速入门

这里写目录 Java发送消息给MQ消费者接收消息实现一个队列绑定多个消费者消息推送限制 Fanout交换机路由的作用Direct交换机使用案例 Java发送消息给MQ public void testSendMessage() throws IOException, TimeoutException {// 1.建立连接ConnectionFactory factory new Conn…...

USB接口的PCB设计

目录 USB接口简介 USB3.0接口 USB接口的电路设计 USB接口的PCB设计 USB接口简介 USB&#xff08;通用串行总线&#xff09;接口是一种广泛应用于电子设备的标准连接技术&#xff0c;自1996年由英特尔、微软等公司联合推出以来&#xff0c;逐步取代了传统串口、并口等复杂接…...

星纪魅族新品发布会定档5月13日,Note 16系列战神归来

5 月 13 日&#xff0c;星纪魅族将举办 Note 16 系列新品线上发布会。届时&#xff0c;国民严选魅族 Note 16 系列将战神归来&#xff0c;刷新用户对“高性价比科技”的想象&#xff0c;开启一场关乎「国民 AI 科技平权」的革新盛宴。 无创意不魅族&#xff0c;花式创意邀请即日…...

Jenkins+Newman实现接口自动化测试

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、是什么Newman Newman就是纽曼手机这个经典牌子&#xff0c;哈哈&#xff0c;开玩笑啦。。。别当真&#xff0c;简单地说Newman就是命令行版的Postman&…...

window 显示驱动开发-线程和同步级别为零级

在零级线程处理和同步中&#xff0c;WDDM 允许以可重入的方式对显示微型端口驱动程序进行零级 DxgkDdi*Xxx 调用。 也就是说&#xff0c;多个线程可以通过调用零级 DDI 同时进入驱动程序。 驱动程序应预期系统中的任何线程会传入&#xff0c;并应相应地保护该线程的数据。 尽…...

RabbitMQ ①-MQ | Linux安装RabbitMQ | 快速上手

MQ MQ&#xff08;Message Queue&#xff09;即消息队列&#xff0c;是一种应用间通信的一种方式。消息队列是一种异步通信方式&#xff0c;生产者&#xff08;Producer&#xff09;将消息放入队列&#xff0c;消费者&#xff08;Consumer&#xff09;从队列中取出消息进行消费…...

tinyrenderer笔记(Shadow Mapping)

tinyrenderer个人代码仓库&#xff1a;tinyrenderer个人练习代码 前言 阴影是光线被阻挡的结果&#xff1b;当光源的光线由于其他物体的阻挡而无法到达物体表面时&#xff0c;该物体就会产生阴影。阴影能使场景看起来更真实&#xff0c;并让观察者获得物体之间的空间位置关系。…...

【quantity】1 SI Prefixes 实现解析(prefix.rs)

一、源码 // prefix.rs //! SI Prefixes (国际单位制词头) //! //! 提供所有标准SI词头用于单位转换&#xff0c;仅处理10的幂次 //! //! Provides all standard SI prefixes for unit conversion, handling only powers of 10.use typenum::{Z0, P1, P2, P3, P6, P9, P12, …...

如何开发一个笑话管理小工具

前言 笔者曾经开发过一个可以对笑话浏览、收藏、分类、编辑上传的小工具&#xff08;笔者开发后台&#xff0c;另外一个朋友负责小程序前台开发&#xff09;&#xff0c;如今所租用的服务器到期了&#xff0c;特此记录一下。 数据层 部署数据库 # 拉取Mysql镜像 docker pull…...

Transformer-LSTM混合模型在时序回归中的完整流程研究

Transformer-LSTM混合模型在时序回归中的完整流程研究 引言与背景 深度学习中的长期依赖建模一直是时序预测的核心问题。长短期记忆网络&#xff08;LSTM&#xff09;作为一种循环神经网络&#xff0c;因其特殊的门控结构能够有效捕捉序列的历史信息&#xff0c;并在时序预测…...

深入浅出iOS性能优化:打造极致用户体验的实战指南

前言 在当今移动应用竞争激烈的时代&#xff0c;性能优化已经成为iOS开发中不可或缺的重要环节。一个性能优秀的应用不仅能给用户带来流畅的使用体验&#xff0c;还能减少设备资源消耗&#xff0c;延长电池寿命&#xff0c;提高用户留存率。本文将深入探讨iOS性能优化的各个方…...

Spring AI 与大语言模型工具调用机制详细笔记

一、基本概念 大语言模型&#xff08;LLM&#xff09;工具调用机制是一种允许AI模型与外部系统交互的技术框架&#xff0c;它使模型能够在对话过程中请求调用预定义的函数或服务。这种机制极大地扩展了大模型的能力边界&#xff0c;使其不再局限于静态知识&#xff0c;而是能够…...

数据清洗-电商双11美妆数据分析

1.数据读取&#xff08;前八行&#xff09; 2.数据清洗 2.1 因为数据中存在重复跟空值&#xff0c;将数据进行重复值处理 &#xff08;删除重复值&#xff09; 2.2 缺失值处理 存在的缺失值很可能意味着售出的数量为0或者评论的数量为0&#xff0c;所以我们用0来填补缺失值 2…...

公司项目架构搭建者

公司项目架构搭建者分析 项目架构搭建的核心角色 #mermaid-svg-FzOOhBwW3tctx2AR {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-FzOOhBwW3tctx2AR .error-icon{fill:#552222;}#mermaid-svg-FzOOhBwW3tctx2AR .err…...

广告场景下的检索平台技术

检索方向概述 数据检索领域技术选型大体分为SQL事务数据库、NoSQL数据库、分析型数据库三个类型。 SQL数据库的设计思路是采用关系模型组织数据&#xff0c;注重读写操作的一致性&#xff0c;注重数据的绝对安全。为了实现这一思路&#xff0c;SQL数据库往往会牺牲部分性能&…...

LintCode407-加一,LintCode第479题-数组第二大数

第407题: 描述 给定一个非负数&#xff0c;表示一个数字数组&#xff0c;在该数的基础上1&#xff0c;返回一个新的数组。 该数字按照数位高低进行排列&#xff0c;最高位的数在列表的最前面. 样例 1&#xff1a; 输入&#xff1a;[1,2,3] 输出&#xff1a;[1,2,4] 样例 …...

网络安全的范式革命:从被动防御到 AI 驱动的主动对抗

当黑客利用生成式 AI 在 30 秒内生成 10 万组钓鱼邮件&#xff0c;当恶意代码学会根据网络环境自主进化&#xff0c;传统网络安全防线正面临前所未有的挑战。2025 年&#xff0c;全球网络安全领域正在经历一场从 “被动挨打” 到 “主动出击” 的革命性转变&#xff0c;AI 与量…...

内网im软件,支持企业云盘的协同办公软件推荐

BeeWorks不仅是一个即时通讯工具&#xff0c;更是一个综合性的企业管理平台。其云盘功能支持大容量文件存储&#xff0c;便企业集中管理文件。并且具备在线协同编辑的能力&#xff0c;这使得企业在文件管理和团队协作方面更加高效和便捷。以下是BeeWorks在企业云盘和在线协同编…...

JAVA SE(9)——多态

1.多态的概念&作用 多态(Polymorphism)是面向对象编程的三大基本特性之一&#xff08;封装和继承已经讲过了&#xff09;&#xff0c;它允许不同类的对象对同一消息做出不同的响应。具体来说&#xff0c;多态允许基类/父类的引用指向派生类/子类的对象&#xff08;向上转型…...

单调栈算法精解(Java实现):从原理到高频面试题

在算法与数据结构的领域中&#xff0c;单调栈&#xff08;Monotonic Stack&#xff09;凭借其独特的设计和高效的求解能力&#xff0c;成为解决特定类型问题的神兵利器。它通过维护栈内元素的单调性&#xff0c;能将许多问题的时间复杂度从暴力解法的\(O(n)\)优化至\(O(n)\)&am…...

密码工具类-生成随机密码校验密码强度是否满足要求

生成随机密码 符合密码强度的密码要求&#xff1a; 至少有一个大写字母至少有一个小写字母至少有一个数字至少有一个特殊字符长度满足要求&#xff08;通常为8-16位&#xff09; // 大写字母private static final String UPPERCASE "ABCDEFGHIJKLMNOPQRSTUVWXYZ";…...

什么是进程,如何管理进程

基本概念&#xff08;什么是进程&#xff1f;&#xff09; 课本概念&#xff1a;程序的一个执行实例&#xff0c;正在执行的程序等内核观点&#xff1a;担当分配系统资源&#xff08;CPU时间&#xff0c;内存&#xff09;的实体。 描述进程-PCB 进程信息被放在一个叫做进程控…...

小刚说C语言刷题—1044 -找出最经济型的包装箱型号

1.题目描述 已知有 A&#xff0c;B&#xff0c;C&#xff0c;D&#xff0c;E五种包装箱&#xff0c;为了不浪费材料&#xff0c;小于 10公斤的用 A型&#xff0c;大于等于 10公斤小于 20 公斤的用 B型&#xff0c;大于等于 20公斤小于 40 公斤的用 C型&#xff0c;大于等于 40…...

用 GRPO 魔法点亮Text2SQL 的推理之路:让模型“思考”得更像人类

推理能力&#xff08;Chain of Thought, CoT&#xff09;可以帮助模型逐步解释其思考过程&#xff0c;从而提高Text-to-SQL 生成的准确性和可解释性。本文探讨了如何将一个标准的 7B 参数的大型语言模型&#xff08;Qwen2.5-Coder-7B-Instruct&#xff09;转变为一个能够为Text…...

k8s service的类型

service和Pods service通过使用labels指向pods,而不是指向deployments或者replicasets。这种设计的灵活性极高&#xff0c;因为创建pods的方式有很多&#xff0c;而Service不需要关心pods通过那种方式创建 不使用service&#xff08;首先看不使用service的情况&#xff09; 如下…...

机器学习 day6 -线性回归练习

题目‌&#xff1a; 从Kaggle的“House Prices - Advanced Regression Techniques”数据集使用Pandas读取数据&#xff0c;并查看数据的基本信息。选择一些你认为对房屋价格有重要影响的特征&#xff0c;并进行数据预处理&#xff08;如缺失值处理、异常值处理等&#xff09;。…...

机器学习-简要与数据集加载

一.机器学习简要 1.1 概念 机器学习即计算机在数据中总结规律并预测未来结果&#xff0c;这一过程仿照人类的学习过程进行。 深度学习是机器学习中的重要算法的其中之一&#xff0c;是一种偏近现代的算法。 1.2 机器学习发展历史 从上世纪50年代的图灵测试提出、塞缪尔开发…...

HTTP请求与前端资源未优化的系统性风险与高性能优化方案

目录 前言一、未合并静态资源&#xff1a;HTTP请求的隐形杀手1.1 多文件拆分的代价1.2 合并策略与工具链实践 二、未启用GZIP压缩&#xff1a;传输流量的浪费2.1 文本资源的压缩潜力2.2 服务端配置与压缩算法选择 三、未配置浏览器缓存&#xff1a;重复请求的根源3.1 缓存失效的…...

黑马点评day04(分布式锁-setnx)

4、分布式锁 4.1 、基本原理和实现方式对比 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁&#xff0c;只要大家使用的是同一把锁&#xff0c;那么我们就能锁住线程&#xff0c;不让线程并行&#x…...

哈尔滨服务器租用

选择一家正规的本地服务商&#xff0c;能够直接促进您网站今后的发展、确保您企业的信息化进程安全、高效。擦亮您的慧眼&#xff0c;用我的经验告诉您该怎么选择服务商。。。。。。。。综合我们为数据客户服务的经验&#xff0c;选择服务器租用、服务提供商客户所需要关注的主…...

企业级RAG架构设计:从FAISS索引到HyDE优化的全链路拆解,金融/医疗领域RAG落地案例与避坑指南(附架构图)

本文较长&#xff0c;纯干货&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习内容&#xff0c;尽在聚客AI学院。 一. RAG技术概述 1.1 什么是RAG&#xff1f; RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09; 是…...

js获取uniapp获取webview内容高度

js获取uniapp获取webview内容高度 在uni-app中&#xff0c;如果你想要获取webview的内容高度&#xff0c;可以使用uni-app提供的bindload事件来监听webview的加载&#xff0c;然后通过调用webview的invokeMethod方法来获取内容的高度。 以下是一个示例代码&#xff1a; <te…...

AI量化解析:从暴跌5%到飙涨3%—非线性动力学模型重构黄金极端波动预测框架

AI分析&#xff1a;假期效应褪去&#xff0c;金价回调背后的市场逻辑 五一假期期间&#xff0c;全球贵金属市场经历显著波动。5月1日&#xff0c;现货黄金单日跌幅达5.06%&#xff0c;价格从历史高位回落至3200美元/盎司附近&#xff0c;国内金饰价格同步回调&#xff0c;主流…...

Python之pip图形化(GUI界面)辅助管理工具

Python之pip图形化&#xff08;GUI界面&#xff09;辅助管理工具 pip 是 Python 的包管理工具&#xff0c;用于安装、管理、更新和卸载 Python 包&#xff08;模块&#xff09;。用于第三方库的安装和管理过程&#xff0c;是 Python 开发中不可或缺的工具。 包的安装、更新、…...

数字传播生态中开源链动模式与智能技术协同驱动的品牌认知重构研究——基于“开源链动2+1模式+AI智能名片+S2B2C商城小程序”的场景化传播实践

摘要&#xff1a;在数字传播碎片化与用户注意力稀缺的双重挑战下&#xff0c;传统品牌认知构建模式面临效率衰减与情感黏性缺失的困境。本文以“开源链动21模式AI智能名片S2B2C商城小程序”的协同创新为切入点&#xff0c;构建“技术赋能-场景重构-认知强化”的分析框架。通过对…...

小芯片大战略:Chiplet技术如何重构全球半导体竞争格局?

在科技飞速发展的今天&#xff0c;半导体行业作为信息技术的核心领域之一&#xff0c;其发展速度和创新水平对全球经济的发展具有举足轻重的影响。然而&#xff0c;随着芯片制造工艺的不断进步&#xff0c;传统的单片集成方式逐渐遇到了技术瓶颈&#xff0c;如摩尔定律逐渐逼近…...