缓存击穿是指 一个非常热点的数据(被高并发访问)在缓存中过期失效的瞬间,导致大量并发请求同时穿透缓存,直接落到底层数据库,造成数据库瞬间压力剧增甚至崩溃的现象。

关键特征和你的描述解析

  1. “数据库没有就需要命中的数据” - 不完全准确:

    • 缓存击穿发生时,数据库里通常是有这个数据的!这是它与“缓存穿透”(查询不存在的数据)的关键区别。

    • 问题的核心在于:缓存层暂时失去了对这个热点数据的保护能力(因为它刚好过期了)。

  2. “导致Redis一直没有数据” - 原因在于并发重建:

    • 当第一个请求发现缓存过期(或不存在),它会去数据库查询,然后打算把结果写回Redis。

    • 问题在于,在这个第一个请求从数据库查完数据、准备写回Redis的极短时间窗口内成百上千的其他并发请求也同时到达了。它们也发现缓存是空的(因为第一个请求还没写完),于是它们都认为需要自己去数据库查!

    • 结果就是:大量请求在极短时间内重复查询同一个数据,数据库不堪重负。Redis 不是“一直没有数据”,而是在缓存失效后、第一个请求成功重建缓存之前的那一瞬间,它无法为后续请求提供数据保护。

  3. “而一直命中数据库” - 这是核心表现和危害:

    • 在缓存失效的那一瞬间,所有针对这个特定热点Key的请求,都绕过了Redis,直接打到了数据库上。

    • 如果这个Key访问量极大(热点),数据库瞬间就可能被压垮(CPU飙升、连接池耗尽、响应超时),进而影响整个系统。

用场景说明缓存击穿

  1. 场景: 一个电商网站首页,有一个“今日秒杀爆款”商品的信息(商品ID=1001)。这个信息被缓存在Redis中,设置过期时间为5分钟。

  2. 正常情况: 用户访问首页,请求“秒杀爆款”信息,Redis直接返回,数据库很轻松。

  3. 缓存击穿发生:

    • 下午2:00:00,商品1001的缓存刚好过期。

    • 下午2:00:01,同时有10,000个用户刷新了首页,都需要获取商品1001的信息。

    • 这10,000个请求都发现Redis中没有商品1001的缓存了。

    • 于是,这10,000个请求几乎同时(在毫秒级内)都去数据库查询商品1001的信息。

    • 数据库瞬间收到10,000个完全相同的查询请求。即使数据库能处理,也会消耗大量资源,导致响应变慢甚至崩溃。其他业务的数据库请求也可能被阻塞。

为什么说你的描述抓住了核心?

  • “Redis一直没有数据”: 在缓存失效后、第一个请求重建缓存成功前,对于后续请求来说,Redis 看起来 就像是“一直没有”这个数据(虽然它马上就要有了)。

  • “一直命中数据库”: 在缓存重建完成之前,所有请求确实都命中了数据库。这个“一直”是相对的,指的是在缓存失效后的那个短暂但致命的并发高峰期内持续命中数据库。

如何解决缓存击穿?

核心思路:防止在缓存失效瞬间,大量请求同时去数据库重建缓存。

  1. 互斥锁(分布式锁):

    • 当第一个请求发现缓存失效时,它先去获取一个针对这个Key的分布式锁(例如用Redis的SETNX命令)。

    • 只有拿到锁的请求才有资格去数据库查询数据并重建缓存。

    • 其他并发请求拿不到锁,就等待(短暂睡眠后重试)或者直接返回一个空值/默认值/错误提示(根据业务容忍度),直到缓存被重建好。

    • 优点: 保证只有一个请求去数据库,彻底防止数据库被压垮。

    • 缺点: 增加了复杂度(锁管理),可能造成部分请求延迟。如果拿锁的请求重建失败,需要处理锁释放和重试机制。

  2. “逻辑”过期:

    • 在缓存的数据结构中,不设置物理TTL过期时间

    • 而是在存储的值里额外加一个逻辑过期时间字段

    • 当请求读取缓存时:

      • 如果发现数据存在,逻辑过期时间还没到,直接返回数据。

      • 如果发现数据存在,逻辑过期时间已到:

        • 当前请求立刻返回旧数据(虽然过期了,但总比没有好)。

        • 当前请求异步触发一个后台任务去数据库拉取新数据并更新缓存(同时更新逻辑过期时间)。

    • 优点: 用户请求基本无延迟(总是有数据返回),数据库压力平缓(只有一个后台任务去更新)。

    • 缺点: 实现更复杂,存在短暂的数据不一致(用户看到的是略微过期的旧数据)。需要维护逻辑过期时间。

  3. 永不过期 + 后台更新:

    • 缓存设置永不过期

    • 由独立的后台进程/定时任务定期去数据库检查数据是否变更,如有变更则主动更新缓存。

    • 优点: 用户请求永远命中缓存(除非数据真的被删了),数据库压力最小。

    • 缺点: 数据更新有延迟(依赖后台任务频率)。如果后台更新失败,缓存会一直保持旧数据。需要实现可靠的后台更新机制。

总结

缓存击穿是指 一个热点Key缓存失效的瞬间,大量并发请求同时穿透缓存直接访问数据库 的现象。你的描述“Redis一直没有数据,而一直命中数据库”抓住了核心表现,但需要理解其发生的根本原因在于缓存失效瞬间的高并发重建,并且数据库里通常是有这个数据的。解决的核心是控制并发重建缓存的请求数量(通常只允许一个请求去重建)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92987.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92987.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/92987.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TF-IDF——红楼梦案例

目录 用 TF-IDF 挖掘《红楼梦》各回目核心关键词:一个 NLP 实践案例 一、案例背景与目标 二、实现步骤 步骤 1:数据准备与分卷处理 1. 导入模块与创建目录 2. 打开源文件并初始化变量 3. 逐行处理文本内容 4. 写入卷内容并过滤前两行 5. 关闭最后…

【软考中级网络工程师】知识点之 IP QoS 技术

目录一、IP QoS 技术是什么1.1 定义与概念1.2 重要性和应用场景二、IP QoS 技术原理2.1 流量分类与标记2.2 流量整形与限速2.3 拥塞避免与管理2.4 资源预留协议(RSVP)三、IP QoS技术模型3.1 尽力而为服务模型3.2 综合服务模型(IntServ&#x…

Git 常用命令速查表

一、仓库初始化与克隆命令说明git init在当前目录初始化本地仓库git clone <远程仓库地址>克隆远程仓库到本地&#xff08;例&#xff1a;git clone https://github.com/user/repo.git&#xff09;二、文件状态与提交命令说明git status查看工作区 / 暂存区文件状态git a…

第五十四章:AI模型的“压缩大师”:GPTQ、AWQ与bitsandbytes实战量化

AI模型压缩前言&#xff1a;让训练好的AI模型“轻装上阵”第一章&#xff1a;回顾与挑战&#xff1a;训练后量化&#xff08;PTQ&#xff09;的必要性1.1 量化原理与精度类型回顾&#xff1a;FP32到INT4/INT81.2 PTQ&#xff08;Post-Training Quantization&#xff09;&#x…

在Word和WPS文字一页中实现一栏与多栏混排

在Word和WPS文字的一页中如何实现分栏和不分栏的内容混排&#xff1f;只需要使用分栏功能。把光标放在要分栏的位置&#xff0c;插入分栏即可&#xff0c;最关键的点是分栏应用于“插入点之后”。如果不需要分栏&#xff0c;则栏数选择为1即可。一、Word和WPS文字的分栏设置路径…

Python调用C/C++函数库的多种方法与实践指南

Python作为一门高级编程语言&#xff0c;以其简洁的语法和丰富的库生态赢得了开发者的青睐。然而&#xff0c;在计算密集型任务中&#xff0c;Python的性能往往无法满足要求。Python调用C/C函数库成为提升应用性能的关键技术路径&#xff0c;通过将底层计算逻辑用C/C实现&#…

【21】OpenCV C++实战篇——OpenCV C++案例实战二十七《角度测量》

OpenCV C案例实战二十七《角度测量》 利用opencv获取三点所形成直线的角度

程序在计算机中的运行方式

程序在计算机中的运行是一个涉及硬件、操作系统和软件协同工作的复杂过程。我们可以将其分解为几个关键阶段来理解&#xff1a;1. 程序的诞生&#xff1a;从源代码到可执行文件 编写代码&#xff1a;程序员使用高级编程语言&#xff08;如C、Python、Java&#xff09;编写源代码…

虚拟卡券管理平台详细设计文档

文章目录**1. 文档概述**1.1 目标1.2 核心能力**2. 业务场景分析**2.1 用户场景2.2 关键业务流程卡券核销流程&#xff1a;**3. 整体架构设计**3.1 技术栈3.2 微服务拆分**4. 功能模块详细设计**▶ 4.1 卡券生命周期管理**4.1.1 卡券类型设计****4.1.2 关键状态机**▶ 4.2 卡券…

Oracle参数Process

RDBMS&#xff1a; 19.28 参考文档&#xff1a; IF:How to determine an optimum value for PROCESSES parameter (Doc ID 2012693.1) All About the Initialization Parameter PROCESSES and the Related Issues (Doc ID 2673195.1) How to calculate the proper value from …

【数据结构入门】树

目录 1.树的概念 父子结点 根节点|叶节点 结点的度 叶子结点或终端结点 兄弟结点 树的度 结点的层次 树的高度或深度 结点的祖先 堂兄弟结点 子孙 森林 2. 树的结构定义 2.1 左孩子右兄弟结构 2.2 数组表示法 3.树&非树 1.树的概念 树是一种非线性的数据结…

手把手教你用 Flink + CDC 实现 MySQL 数据实时导入 StarRocks(干货)

手把手教你用 Flink CDC 实现 MySQL 数据实时导入 StarRocks&#xff08;干货&#xff09; 如何利用 Apache Flink 结合 CDC&#xff08;Change Data Capture&#xff0c;变更数据捕获&#xff09;技术&#xff0c;将 MySQL 的数据实时导入 StarRocks&#xff0c;打造高效的实…

Rust:anyhow 高效错误处理库核心用法详解

以下是 anyhow 库在 Rust 中的核心用法详解&#xff08;结合最佳实践和示例&#xff09;&#xff1a; &#x1f530; 一、anyhow 的核心价值 用于简化错误处理&#xff0c;尤其适合&#xff1a; 需要快速原型开发的应用需要丰富错误上下文&#xff08;Context&#xff09;的场…

阿里云服务linux安装单机版

一、单机安装Redis 阿里教程 下载地址:redis下载地址 1、首先需要安装Redis所需要的依赖&#xff1a; yum install -y gcc tcl 2、下载Redis 注&#xff1a;也可以自己下好然后上传到云服务 wget https://gitcode.net/weixin_44624117/software/-/raw/master/software/Li…

python之uv使用

文章目录安装与更新standalonepip 安装创建以及初始化项目依赖管理uv run直接在命令行运行python代码片段直接运行项目中可执行脚本文件运行python包中快捷指令uv项目本地运行调试细节vscode 中运行调试uv项目命令行运行深入理解 uv lock, uv sync, uv lockuv lock 行为解析:uv…

【CV 目标检测】①——目标检测概述

一、目标检测概述 1.目标检测 目标检测&#xff08;Object Detection&#xff09;的任务是找出图像中所有感兴趣的目标&#xff0c;并确定它们的类别&#xff08;分类任务&#xff09;和位置&#xff08;回归任务&#xff09; 目标检测中能检测出来的物体取决于当前任务&…

C#图形库SciChart与ScottPlot及LiveCharts2对比

一.概述 1.SciChart SciChart 是一个专为企业级应用设计的高性能数据可视化库&#xff0c;提供跨平台的图表解决方案&#xff0c;支持 .NET、JavaScript、iOS 和 Android 等多个平台。它以卓越的渲染性能、丰富的专业图表类型和强大的交互功能著称&#xff0c; 广泛应用于金…

Win10电脑密码忘记如何进入操作系统

http://xq128.com/zj.htmlhttps://share.feijipan.com/s/LbFdbUKl下载后&#xff0c;准备一个空的U盘&#xff0c;大于4G。将U盘制作为PE盘。之后将制作好的PE盘插入到电脑中&#xff0c;启动待去除密码的电脑台式机&#xff0c;启动后一直按住F12&#xff0c;进入BIOS。选择下…

[免费]基于Python的网易云音乐热门歌单可视化大屏项目(flask+pandas+echarts+request库)【论文+源码+SQL脚本】

大家好&#xff0c;我是python222_小锋老师&#xff0c;看到一个不错的基于Python的网易云音乐热门歌单可视化大屏项目(flaskpandasechartsrequest库)&#xff0c;分享下哈。 项目视频演示 【免费】基于Python的网易云音乐热门歌单可视化大屏项目(flaskpandasecharts爬虫) Py…

AR 智能眼镜:从入门到未来

从零看懂 AR 智能眼镜:未来 10 年技术演进与新手入门指南 在这个数字技术飞速迭代的时代,AR 智能眼镜正从科幻电影走进现实。从 2025 年重量不足 35 克的消费级产品,到 2030 年成为 “第二大脑” 的生活刚需,再到 2040 年进化为神经接口终端,AR 智能眼镜的发展将重塑人类…