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

ops/2025/1/19 14:47:52/

前言

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


1. 缓存穿透

定义

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

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

场景

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

解决方案

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

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

流程图

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

2. 缓存击穿

定义

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

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

场景

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

解决方案

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

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

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

流程图

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

3. 缓存雪崩

定义

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

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

场景

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

解决方案

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

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

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

流程图

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

总结

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

http://www.ppmy.cn/ops/151405.html

相关文章

精准测量,尽在掌握 —— 电导率传感器:科技之水质的守护者

在科技日新月异的今天,我们身边的每一个细节都融入了智能与精准的元素。水质监测,这一关乎人类健康与生态环境的重大课题,同样受益于现代科技的进步。其中,电导率传感器作为水质监测的重要工具,正以它独特的方式&#…

MySQL 篇 - Java 连接 MySQL 数据库并实现数据交互

在现代应用中,数据库是不可或缺的一部分。Java 作为一种广泛使用的编程语言,提供了丰富的 API 来与各种数据库进行交互。本文将详细介绍如何在 Java 中连接 MySQL 数据库,并实现基本的数据交互功能。 一、环境准备 1.1 安装 MySQL 首先&am…

定时任务特辑 Quartz、xxl-job、elastic-job、Cron四个定时任务框架对比,和Spring Boot集成实战

专栏集锦,大佬们可以收藏以备不时之需: Spring Cloud 专栏:http://t.csdnimg.cn/WDmJ9 Python 专栏:http://t.csdnimg.cn/hMwPR Redis 专栏:http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏:http://t.csdni…

强推未发表!3D图!Transformer-LSTM+NSGAII工艺参数优化、工程设计优化!

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Transformer-LSTMNSGAII多目标优化算法,工艺参数优化、工程设计优化!(Matlab完整源码和数据) Transformer-LSTM模型的架构:输入层:多个变量作…

MindAgent:基于大型语言模型的多智能体协作基础设施

2023-09-18 ,加州大学洛杉矶分校(UCLA)、微软研究院、斯坦福大学等机构共同创建的新型基础设施,目的在评估大型语言模型在游戏互动中的规划和协调能力。MindAgent通过CuisineWorld这一新的游戏场景和相关基准,调度多智…

Day09-后端Web实战——部门管理开发Logback日志技术

目录 部门管理开发1. 删除部门1.1 需求分析 1.2 思路分析1.2.1 思路说明1.2.1 简单参数接收 1.3 代码实现1.4 Mybatis中的#与$ 2. 新增部门2.1 需求分析2.2 思路分析2.2.1 思路说明2.2.2 json参数接收 2.3 代码实现 3. 修改部门3.1 查询回显3.1.1 需求分析3.1.2 思路分析3.1.2.…

分布式项目新选择:Dubbo搭建方案

在当今的数字化时代,构建高性能、可扩展的分布式系统已成为众多企业应对业务增长和技术挑战的关键。Dubbo,作为阿里巴巴开源的一款高性能、轻量级的Java RPC框架,为Java开发者提供了一套完善的分布式服务治理方案。本文将详细介绍如何使用Dub…

密码机服务器在云计算中的应用与挑战

随着云计算技术的迅猛发展和普及,密码机服务器作为一种高效、专业的数据安全解决方案,正在云计算领域中扮演着越来越重要的角色。本文将探讨密码机服务器在云计算中的应用及其面临的挑战。 云计算技术涉及大量的数据传输和存储,数据的安全性和…