缓存穿透是什么?什么场景下会发生?如何解决?

什么是缓存穿透?

缓存穿透是指请求的数据在缓存和数据库中均不存在的情况。当大量请求同时查询一个不存在的数据时,这些请求会直接打到数据库上,导致数据库压力增大,甚至可能引发数据库崩溃。换句话说,缓存穿透是指请求绕过缓存,直接访问后端数据库。

缓存穿透的场景

缓存穿透通常发生在以下几种场景中:

  1. 无效请求
    • 用户请求的数据在数据库中根本不存在,例如请求一个错误的ID或不合法的参数。
  2. 恶意攻击
    • 攻击者故意发送大量请求,查询不存在的数据,以此消耗系统资源,造成服务拒绝(DoS)攻击。
  3. 数据未缓存
    • 某些数据在数据库中确实存在,但由于某种原因未被缓存(例如,缓存策略未覆盖到该数据)。

如何解决缓存穿透

1. 使用布隆过滤器

布隆过滤器详解-CSDN博客

布隆过滤器是一种空间效率高的概率数据结构,可以用来判断一个元素是否在一个集合中。通过在请求到达数据库之前,先查询布隆过滤器,可以有效地过滤掉不存在的数据请求。

  • 实现步骤
    • 在缓存中维护一个布隆过滤器,存储所有有效的ID或键。
    • 当接收到请求时,先查询布隆过滤器,如果返回不存在,则直接返回空结果,避免查询数据库。

2. 缓存空结果

对于查询到的不存在的数据,可以将结果缓存为空值(如 null 或特定的标识),并设置一个较短的过期时间。这样,后续的相同请求将直接从缓存中返回空结果,而不再查询数据库。

  • 实现步骤
    • 当查询数据库返回空结果时,将该请求的键存入缓存,并设置过期时间。
    • 对于后续相同请求,直接从缓存中返回空结果。

3. 参数校验

在处理请求之前,进行参数的有效性校验,确保请求的数据是合法的。这可以有效减少无效请求的数量。

  • 实现步骤
    • 在应用层增加参数校验逻辑,确保请求的ID或参数符合预期格式和范围。

4. 限流和防火墙

对于高频请求,可以使用限流技术,限制单位时间内的请求次数。同时,可以通过防火墙或安全策略,阻止来自可疑IP的请求。

  • 实现步骤
    • 使用 API 网关或中间件实现请求限流。
    • 监控异常流量,并采取相应的安全措施。
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值