2024-06-20
小知识
00
请注意,本文编写于 216 天前,最后修改于 204 天前,其中某些信息可能已经过时。

目录

大白话
详解
缓存穿透
定义
解决方案
缓存击穿
定义
应对策略
缓存雪崩
定义
防范措施

大白话

缓存穿透就是请求你缓存中不存在的数据从而请求直达数据库 也可能存在恶意攻击 比如请求id是-1 数据库中不存在大多数 空数据不会进行缓存 这样就会造成请求一直到数据库了,解决方法就是采用布隆过滤器直接过滤掉-1这种不会存在的请求返回空 亦或者把这些空数据也进行短时间的缓存。

缓存击穿 就是你的热点key(经常被读取的的数据缓存)失效了 大量的高并发请求打到数据库造成的负载升高,解决办法常用的就是设置永不过期key 然后新数据更新这个key还有就是加锁确保只有一个线程去请求数据库查数据更新缓存,还有一个缓存预热 系统启动之前进行热点数据优先缓存

缓存雪崩和击穿有点相似就是key失效 只不过这个是大面积的同时失效 应对方法就是避免key设置统一时间过期然后缓存定期持久化确保缓存快速恢复

详解

61781cd6d82e4a0cc5f7521333049f0d.webp

缓存穿透

定义

缓存穿透发生在请求查询的数据不在缓存中,同时数据库也无此数据时。恶意攻击,例如频繁请求数据库中不存在记录(例如ID为-1),可导致每次请求直击数据库,增加其负担。

解决方案

  • 布隆过滤器:利用布隆过滤器预先检查数据是否存在,避免无效请求达到数据库。
  • 缓存空结果:即便查询无结果,也可在缓存中暂存空值或特定标记,设置较短TTL,减少重复查询数据库。

缓存击穿

定义

当热点键(频繁访问的缓存项)过期时,遭遇高并发请求,所有请求绕过缓存直接访问数据库,可能引起数据库负载激增。

应对策略

  • 永不过期:设置热点数据缓存永不失效,通过后台任务异步刷新缓存内容。
  • 加锁机制:对数据库访问逻辑加锁,确保仅一个线程访问数据库更新缓存。
  • 缓存预热:系统启动或缓存即将过期前,提前加载热点数据至缓存,减轻数据库压力。

缓存雪崩

定义

大量缓存同时失效,导致所有请求直接命中数据库,类似于缓存击穿但影响更广泛,可能导致系统崩溃。

防范措施

  • 过期时间分散:设置缓存项过期时间分散,避免集中失效。
  • 缓存持久化与快速恢复:定期持久化缓存数据,故障时快速从备份中恢复缓存。
  • 限流与降级:实施请求限流和服务降级策略,保护核心服务稳定运行。

37e4378d2edcb5e217b00e5f12973efd-20230309232858764.webp

本文作者:周得水

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!