快速了解缓存穿透与缓存雪崩

embedded/2025/1/7 21:49:33/

缓存系统的使用过程中,缓存穿透缓存雪崩是两种常见的问题,它们会导致缓存失效,从而对系统性能造成影响。下面我将快速介绍这两个问题及其解决方法。


1. 缓存穿透 (Cache Penetration)

缓存穿透是指客户端请求的某些数据,既不在缓存中,也不在数据库中。换句话说,用户请求的资源即使缓存失效,数据库也没有对应的数据。这些请求会直接穿过缓存层,查询数据库,导致数据库承受不必要的压力。

典型场景
  • 用户请求某个不存在的数据,缓存没有数据返回,且数据库也不存在这个数据,最终请求还会访问数据库
  • 每次查询一个非法或无效的数据时,缓存层的失效并没有起到应有的作用,导致所有请求都直接访问数据库,产生不必要的负担。
如何解决缓存穿透
  • 使用布隆过滤器(Bloom Filter):在缓存层之前,使用布隆过滤器来判断某个数据是否存在。如果布隆过滤器返回数据不存在,可以直接拦截请求,不再查询数据库
  • 缓存空数据:对于那些已经验证过数据库没有的数据,可以将空数据缓存一段时间,防止重复的无效请求每次都访问数据库
  • 请求参数校验:在应用层增加对请求参数的校验,防止无效请求进入缓存数据库

2. 缓存雪崩 (Cache Avalanche)

缓存雪崩是指缓存中大量数据在同一时间过期,导致大量请求直接访问数据库数据库瞬间承受巨大的压力,可能导致服务崩溃。通常,这种情况发生在缓存中大量键的过期时间设置相同或者在短时间内失效时。

典型场景
  • 缓存失效时,所有的请求都要直接访问数据库,导致数据库瞬间变得非常繁忙,可能无法承受过高的并发请求。
  • 如果缓存集群中大量缓存同时失效(例如,全部设置相同的过期时间),请求会瞬间涌向数据库,造成数据库压力激增,进而影响整个系统的性能和稳定性。
如何解决缓存雪崩
  • 设置不同的过期时间:对于缓存中的数据,可以随机化过期时间,避免大量缓存同时失效。
  • 提前加载缓存缓存预热):在缓存即将过期时,提前加载新的数据到缓存中,避免缓存过期带来的突发压力。
  • 使用互斥锁(分布式锁):在缓存失效时,通过分布式锁控制同一时刻只有一个请求能够重新加载数据到缓存,防止缓存未命中的请求同时访问数据库
  • 多级缓存策略:可以使用多级缓存(如 Redis + 本地缓存)来减少对数据库的依赖,提高容错性。

总结

  • 缓存穿透:是由于查询的数据既不在缓存中也不在数据库中,导致请求直接穿透缓存访问数据库,增加数据库负担。解决方法:使用布隆过滤器、缓存空数据、请求参数校验。
  • 缓存雪崩:是因为缓存中大量数据的过期导致大量请求涌向数据库,增加数据库压力,可能引发服务崩溃。解决方法:设置不同的过期时间、缓存预热、使用分布式锁、采用多级缓存

通过合理设计缓存策略和处理机制,可以有效避免缓存穿透和缓存雪崩问题,提高系统的性能和稳定性。


http://www.ppmy.cn/embedded/151289.html

相关文章

LeetCode算法题——移除元素

题目描述 给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作&#xff1…

【Python】selenium结合js模拟鼠标点击、拦截弹窗、鼠标悬停方法汇总(使用 execute_script 执行点击的方法)

我们在写selenium获取网络信息的时候,有时候我们会受到对方浏览器的监控,对方通过分析用户行为模式,如点击、滚动、停留时间等,网站可以识别出异常行为,进而对Selenium爬虫进行限制。 这里我们可以加入JavaScript的使…

HTML——16.相对路径

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><a href"../../fj1/fj2/c.html" target"_blank">链接到c</a><!--相对路径&#xff1a;-->…

Flume的安装和使用

一、安装Flume 1. 下载flume-1.7.0 http://mirrors.shu.edu.cn/apache/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz 2. 解压改名 tar xvf apache-flume-1.7.0-bin.tar.gz mv apache-flume-1.7.0-bin flume 二、配置Flume 1. 配置sh文件 cp conf/flume-env.sh.template …

UML之组合与聚合

关联和链接关系在很多情况下是对称的&#xff0c;即被关联的两个类都有以自己为源端对方为目标端的角色存在&#xff0c;而且角色与源端类的属性是等价的&#xff0c;即在关联一端的关联端&#xff08;角色&#xff09;等价于另外一端的属性。例如&#xff0c;在下图中&#xf…

51.第二阶段x86游戏实战2-继续寻找lua

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

【每日学点鸿蒙知识】PersistentStorage持久化、插槽方法、相对布局、上拉加载下拉刷新、List联动滑动

1、HarmonyOS 使用PersistentStorage持久化用户信息无效&#xff1f; 在首页通过StorageLink(‘userInfoTest’) userInfoTest: string 获取&#xff0c;获不到&#xff0c;返回undefind。是什么原因呢&#xff1f; 首先在首页时&#xff0c;在Entry外声明PersistentStorage…

NLP初识

目录 0简介一、自然语言概述1. 什么是NLP?2. NLP常用工具0简介 NLP系列开始更新了!!!这个系列主要会介绍一些NLP的基础概念,比如RNN、LSTM、GRU等内容,重头戏放在大语言模型的基础讲解上,其中大语言模型的分享主要由两个方面:1.基础结构(Seq2Seq,Attention,Transfor…