关于缓存的一些问题

关于缓存的一些问题

1、缓存穿透

什么是缓存穿透:

缓存穿透指的是在使用缓存系统的过程中,对于不存在的数据不断地进行查询请求,导致这些请求都无法从缓存中获取到数据,最终达到了绕过缓存的目的,直接访问后端数据源

缓存穿透通常发生在以下情况下:

1、查询不存在的数据

2、恶意攻击或恶意请求

如何解决缓存穿透:

  1. 布隆过滤器(Bloom Filter):使用布隆过滤器来判断请求的数据是否存在。布隆过滤器是一种数据结构,可以用于高效地判断一个元素是否在集合中。可以在缓存层或请求处理层使用布隆过滤器,如果请求的数据在布隆过滤器中不存在,则可以直接返回结果,而无需查询后端数据源。
  2. 缓存空值处理:对于查询到的空数据,可以将其缓存下来,并设置一个较短的过期时间,避免针对这些数据的重复查询。
  3. 热点数据预热:提前将一些热门或常用的数据加载到缓存中,避免因为第一次查询时导致整个数据缓存为空的情况。
  4. 限制无效查询请求:对于频繁查询的请求,可以进行限制,例如设置查询频率限制或者黑名单机制,避免大量无效请求对系统造成负载压力。

2、缓存击穿

什么是缓存击穿:

缓存击穿是指在使用缓存系统的过程中,某个热点数据突然失效或被淘汰,导致大量请求同时涌入后端数据源,造成后端压力过大,甚至引发系统崩溃

什么时候发生缓存击穿:

  1. 热点数据失效:某个非常热门的数据,由于缓存过期或其他原因,突然从缓存中失效。此时,大量请求几乎同时访问该数据,导致这些请求都无法从缓存中获取到数据。
  2. 缓存淘汰:当缓存空间不足时,缓存系统可能采取淘汰策略,将一些数据从缓存中移除。如果被淘汰的数据正好是一个热点数据,那么在数据重新加载到缓存之前,大量请求会直接访问后端数据源。

缓存击穿的一些解决方案:

  1. 热点数据永不过期:对于非常热门的数据,可以设置较长的过期时间,甚至不过期,以保证热点数据一直存在于缓存中。
  2. 互斥锁(Mutex Lock):当缓存失效时,可以使用互斥锁来保证只有一个请求能够访问后端数据源,而其他请求在等待数据加载完成之后再获取。
  3. 延迟加载:当发现缓存失效时,可以异步地进行后端数据源的加载操作,避免阻塞请求,并尽快将数据加载到缓存中。
  4. 限制并发请求:可以对请求进行限制,例如使用信号量或者限流算法来控制并发请求的数量,避免大量请求同时访问后端数据源。

3、缓存雪崩

什么是缓存雪崩:

缓存雪崩是指在使用缓存系统的过程中,大面积的缓存失效或同时过期,导致大量请求直接访问后端数据源,造成后端压力过大,甚至引发系统崩溃

缓存雪崩发生在以下情况下:

  1. 缓存过期时间设置不合理:如果大量缓存的过期时间设置得非常接近,导致它们在近似的时间点同时失效,就会出现大面积的缓存失效。
  2. 缓存服务器故障:如果缓存服务器发生故障或宕机,导致所有缓存都无法使用,系统会直接访问后端数据源。
  3. 大量热键请求:当某个热门数据过期后,大量请求几乎同时访问该数据,导致缓存系统无法处理这么高的并发请求。

解决方案:

  1. 设置合理的缓存过期时间:避免所有缓存在相同的时间点失效,可以设置随机的缓存过期时间,分散缓存失效时间。
  2. 实施缓存预热策略:提前加载常用的热门数据到缓存中,避免缓存冷启动期间的大量请求直接访问后端数据源。
  3. 多级缓存架构:采用多级缓存架构,如分布式缓存系统,可以分散请求的压力,避免单一缓存故障导致全部请求直接访问后端数据源。
  4. 异步更新缓存:当缓存过期时,可以通过异步的方式来更新缓存,避免阻塞请求,并减少缓存失效的时间窗口。
  5. 监控和报警机制:建立合适的监控和报警机制,及时发现缓存失效或故障情况,采取相应的措施进行处理,以减少潜在的影响。
相关推荐
星辰_mya8 分钟前
OSI 七层模型之“跨国诈骗集团”深度讲解
运维·服务器·后端·面试·架构师
IT_陈寒14 分钟前
SpringBoot自动配置这破玩意儿又坑我一次
前端·人工智能·后端
码事漫谈1 小时前
Cursor+Graphify实属强强联合了
后端
用户298698530141 小时前
不用无头浏览器,Java 如何将 HTML 转成图片?
java·后端
我叫黑大帅1 小时前
其实跨域问题是后端来解决的? CORS
后端·面试·go
woniu_buhui_fei1 小时前
Redis知识整理二
数据库·redis·缓存
untE EADO2 小时前
redis的下载和安装详解
数据库·redis·缓存
掘金一周2 小时前
掘友们,一人说一个你买过夯到爆的东西 | 沸点周刊 4.23
前端·人工智能·后端
Developer_Niuge2 小时前
告别翻不动的 1000+ 书签:开源 Chrome / Edge 浏览器书签管理插件 Smart Bookmark 0.2 发布
前端·后端
ElevenPlus2 小时前
【 AI智能体时代:一名Javaer的技术随想录】MCP服务部署架构
后端