Redis 缓存穿透、击穿、雪崩 的区别与解决方案

前言

Redis 是一个高性能的键值数据库,广泛应用于缓存、会话存储、实时数据分析等场景。然而,在高并发的环境下,Redis 缓存可能会遇到 缓存击穿缓存穿透缓存雪崩 这三大问题。这些问题不仅影响系统的稳定性和性能,还经常出现在面试题中,值得我们深入了解🤏。


1. 缓存穿透

定义

缓存穿透指的是查询一个不存在的数据时,缓存层和数据库层都会返回空结果,导致每次请求都直接访问数据库,从而失去缓存的加速作用,增加数据库的负担。

穿透”可以简单的理解为:缓存和数据库都不存在要查询的数据,请求直接“穿透”了缓存。

场景

例如:用户请求一个不存在的商品ID,由于缓存和数据库中都没有该商品的信息,请求直接穿透到数据库,增加数据库的压力。

解决方案

  1. 布隆过滤器
    使用布隆过滤器缓存不存在的请求,避免每次都查询数据库。布隆过滤器可以高效判断某个元素是否在集合中,减少不必要的数据库查询。

  2. 缓存空值
    当查询结果为空时,可以将空值缓存一段时间(如 1-5 分钟),避免频繁穿透。这样即使请求再次到来,也能从缓存中返回空值,减少数据库查询。

流程图

用户请求不存在的数据
检查缓存
缓存未命中
检查数据库
返回空结果
缓存空值
减少数据库负载

2. 缓存击穿

定义

缓存击穿是指缓存中的某些数据在失效后,大量请求同时访问该数据,导致所有请求直接穿透到数据库,增加数据库压力,甚至可能导致数据库崩溃。

击穿”可以简单的理解为:缓存不存在,但是数据库存在要查询的数据,请求直接“击穿”了缓存。

场景

例如:某个商品详情数据在缓存中过期,多个用户同时请求该商品数据,由于缓存失效,这些请求直接访问数据库,造成数据库负载骤增。

解决方案

  1. 互斥锁
    在缓存失效时,使用分布式锁确保只有一个请求访问数据库并更新缓存,其余请求等待缓存更新完毕后再从缓存中获取数据,避免同时访问数据库。

  2. 缓存预热
    在系统启动时,提前将常用数据加载到缓存中,减少缓存失效的概率,确保热点数据一直在缓存中。

  3. 合理的缓存失效时间
    根据数据访问频率和业务需求合理设定缓存过期时间,避免过短的失效时间引起频繁的缓存更新和数据库访问。

流程图

用户请求数据
检查缓存
缓存失效
检查数据库
返回数据
更新缓存
后续请求直接访问缓存

3. 缓存雪崩

定义

缓存雪崩是指大量缓存数据在同一时间失效,导致大量请求同时访问数据库,给数据库带来巨大压力,甚至可能导致数据库崩溃。

雪崩”可以简单的理解为:大量缓存同一时间失效,缓存“雪崩”了。

场景

例如:大量缓存数据设置了相同的过期时间,所有缓存数据在某一时刻失效,导致大量请求同时访问数据库,可能引发雪崩效应。

解决方案

  1. 错开缓存过期时间
    在缓存过期时间上增加随机偏移量,错开过期时间,减少缓存同时过期的情况。

  2. 使用永久缓存
    对于不经常变化的数据,可以使用永久缓存,避免频繁失效,减少数据库访问。

  3. 降级处理
    当缓存系统发生故障时,启用降级机制,将部分请求转发至备用缓存或返回默认值,减轻数据库压力。

流程图

多个缓存项过期
多个用户请求同时访问数据库
访问数据库
数据库返回数据
更新缓存
后续请求直接访问缓存

总结

  • 缓存穿透:查询数据时 缓存和数据库都不存,使用 布隆过滤器缓存空值 避免每次都访问数据库。
  • 缓存击穿:查询数据时 缓存不存在,数据库存在,使用 互斥锁缓存预热合理的过期时间 解决。
  • 缓存雪崩:查询数据时 大量缓存同一时间失效,通过 错开缓存过期时间使用永久缓存降级处理 应对。

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

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

相关文章

技术晋升读书笔记—华为研发

读完《华为研发》第三版,我深感震撼,书中的内容不仅详实地记录了华为公司的成长历程,还揭示了华为成功背后的管理理念和创新思路。这本书通过真实的案例和数据,展示了华为如何从一个小企业发展成全球通信行业的领导者。 一、关键人…

高效实现 Markdown 转 PDF 的跨平台指南20250117

高效实现 Markdown 转 PDF 的跨平台指南 引言 Markdown 文件以其轻量化和灵活性受到开发者和技术写作者的青睐,但如何将其转换为易于分享和打印的 PDF 格式,是一个常见需求。本文整合了 macOS、Windows 和 Linux 三大平台的转换方法,并探讨…

[Mac + Icarus Verilog + gtkwave] Mac运行Verilog及查看波形图

目录 1. MAC安装环境 1. 1 Icarus Verilog 编译 1. 2 gtkwave 查看波形 2. 安装遇到的问题 2. 1 macOS cannot verify that this app is free from malware 2. 2 gtkwave-bin is not compatible with macOS 14 or later 3. 运行示例 3. 1 源代码 3. 2 编译Verilog 3. 3 生成.v…

FRP内网穿透0.61.1新版教程

在上一篇zerotier讲述了如何实现虚拟局域网搭建,这篇会讲述FRP内网穿透的使用教程 那么frp与zerotier的区别是什么呢?(说人话) FRP 主要用于内网服务向外网的单向暴露。 ZeroTier 用于构建一个虚拟的私有网络,实现多点…

如何通过 Apache Airflow 将数据导入 Elasticsearch

作者:来自 Elastic Andre Luiz 了解如何通过 Apache Airflow 将数据导入 Elasticsearch。 Apache Airflow Apache Airflow 是一个旨在创建、安排(schedule)和监控工作流的平台。它用于编排 ETL(Extract-Transform-Load&#xff0…

通过图形界面展现基于本地知识库构建RAG应用

1. 客户需求 快速完成概念验证(PoC)通过图形界面快速完成演示本地私有数据对比不同模型和成本,决定如何部署 2. 阿里云基于本地知识库构建RAG应用 参考方案: 百炼本地知识库方案 解决方案: FastAPI Gradio Llamaindex qwen-plus 主要三大…

TP4056锂电池充放电芯片教程文章详解·内置驱动电路资源!!!

目录 TP4056工作原理 TP4056引脚详解 TP4056驱动电路图 锂电池充放电板子绘制 编写不易,仅供学习,感谢理解。 TP4056工作原理 TP4056是专门为单节锂电池或锂聚合物电池设计的线性充电器,充电电流可以用外部电阻设定,最大充电…

【Vim Masterclass 笔记21】S09L39:Vim 设置与 vimrc 文件的用法示例(二)

文章目录 S09L39 Vim Settings and the Vimrc File - Part 21 Vim 的配色方案与 color 命令2 map 命令3 示例:用 map 命令快速生成 HTML 代码片段4 Vim 中的 Leader 键5 用 mkvimrc 命令自动生成配置文件 写在前面 本篇为 Vim 自定义配置的第二部分。当中的每个知识…

论文速读|ParGo: Bridging Vision-Language with Partial and Global Views.AAAI25

论文地址:https://arxiv.org/abs/2408.12928 代码地址:https://github.com/bytedance/ParGo bib引用: misc{wang2025pargobridgingvisionlanguagepartial,title{ParGo: Bridging Vision-Language with Partial and Global Views}, author{An…

2024年博客之星年度评选—创作影响力评审入围名单公布

2024年博客之星活动地址https://www.csdn.net/blogstar2024 TOP 300 榜单排名 用户昵称博客主页 身份 认证 评分 原创 博文 评分 平均 质量分评分 互动数据评分 总分排名三掌柜666三掌柜666-CSDN博客1001002001005001wkd_007wkd_007-CSDN博客1001002001005002栗筝ihttps:/…

20250118拿掉荣品pro-rk3566开发板上Android13下在uboot和kernel启动阶段的Rockchip这个LOGO标识

20250118拿掉荣品pro-rk3566开发板上Android13下在uboot和kernel启动阶段的Rockchip这个LOGO标识 2025/1/18 15:12 缘起:做飞凌OK3588-C开发板/核心板【Linux R4】的时候,测试/生产要求没有开机LOGO【飞凌/Rockchip】 要求:黑屏或者中性界面。…

【转】厚植根基,同启新程!一文回顾 2024 OpenHarmony 社区年度工作会议精彩瞬间

在数字化浪潮奔腾不息的今天,开源技术已成为推动科技创新与产业发展的强大引擎。2025年1月10日-11日,OpenAtom OpenHarmony(开放原子开源鸿蒙,以下简称“OpenHarmony”或“开源鸿蒙”)社区2024年度工作会议于深圳盛大启…

Mybatis 进阶 / Mybatis—Puls (详细)

目录 一.动态SQL 1.1标签 1.2 标签 1.3标签 1.4标签 1.5标签 1.6标签 mybatis总结: 二.Mybatis-Puls 2.1准备工作 2.2CRUD单元测试 2.2.1创建UserInfo实体类 2.2.2编写Mapper接⼝类 2.2.3 测试类 2.3 常见注解 2.3.1TableName 2.3.2TableField 2.4打印日…

Go 切片:用法和本质

要想更好的了解一个知识点,实战是最好的经历。 题目 我这里放一道题目: package mainimport "fmt"func SliceRise(s []int) {s append(s, 0)for i : range s {s[i]}fmt.Println(s) }func SlicePrint() {s1 : []int{1, 2}s2 : s1s2 append…

如何下载对应城市的地理json文件

这里采用的是阿里地图工具进行查找: DataV.GeoAtlas地理小工具系列 由阿里云DataV数据可视化团队出品,多年深耕数据可视化领域,数据大屏业务开拓者和领航者。致力用震撼而清晰的视觉语言,让更多人读懂大数据,受惠数据驱动的决策方式 第一步打开网站 : …

AI 大爆发时代,音视频未来路在何方?

AI 大模型突然大火了 回顾2024年,计算机领域最大的变革应该就是大模型进一步火爆了。回顾下大模型的发展历程: 萌芽期:(1950-2005) 1956年:计算机专家约翰麦卡锡首次提出“人工智能”概念,标志…

解决wordpress媒体文件无法被搜索的问题

最近,我在wordpress上遇到了一个令人困扰的问题:我再也无法在 WordPress 的媒体库中搜索媒体文件了。之前,搜索媒体非常方便,但现在无论是图片还是其他文件,似乎都无法通过名称搜索到。对于我这样需要频繁使用图片的博主来说,这简直是个大麻烦。 问题源头 一开始,我怀…

代码随想录训练营第五十一天| 99.岛屿数量 深搜 岛屿数量 广搜 100.岛屿的最大面积

99.岛屿数量 深搜 题目链接:99. 岛屿数量 讲解链接:代码随想录 就是dfs模版题目 在dfs里可以先定义方向数组移动 再遍历分别向四个方向移动 同时记得更新当前nextx nexty 再判断是否越界 再执行判断条件 当前位置未走过 visited[i][j] false 一开始jav…

springboot之YAML语法

目录 一、基本语法 写一个端口号和一个路径 Controller里的方法: 然后这样写才能访问到: 这是在yml里面写的,也可以写在properties里 再访问: 二、值的写法 1.普通类型(数字、字符串、布尔) 例子1: 配置文件…

ASP .NET Core 学习 (.NET 9)- 创建 API项目,并配置Swagger及API 分组或版本

本系列为个人学习 ASP .NET Core学习全过程记录,基于.NET 9 和 VS2022 ,实现前后端分离项目基础框架搭建和部署,以简单、易理解为主,注重页面美观度和后台代码简洁明了,可能不会使用过多的高级语法和扩展,后…