码上敲享录 > java面试题及答案大全 > 什么是缓存穿透?怎么解决?

什么是缓存穿透?怎么解决?

上一章章节目录下一章 2023-07-11已有251人阅读 评论(0)

缓存穿透指的是在使用缓存系统时,请求查询一个不存在于缓存中又不存在于数据库中的数据,导致每次都会访问数据库,而缓存无法起到应有的作用,从而对数据库造成了不必要的压力。


缓存穿透可能发生的原因包括恶意攻击、热点数据失效或者数据在缓存中不存在等。解决缓存穿透的方法如下:


1. 布隆过滤器(Bloom Filter):使用布隆过滤器可以在缓存层之前进行预判,判断请求的数据是否存在于数据库中。如果布隆过滤器判断数据不存在,那么可以立即返回,避免对数据库的查询操作。


2. 空对象缓存:在缓存中设置一个空对象的缓存,表示数据库中不存在该数据。这样,当查询的数据不存在时,缓存中会有一个空对象作为占位符,避免频繁查询数据库。在一定时间后,空对象会过期自动失效。


3. 数据预加载:可以通过定期异步地或者在系统启动时从数据库加载热门数据到缓存中。这样可以尽量提前将热门数据加载到缓存中,减少缓存穿透的可能性。


4. 限流和黑名单:通过限制请求频率、IP等方式,对异常请求进行限制。可以设置短期的限流策略,对持续异常请求的IP进行加入黑名单,禁止访问。


5. 异步更新:在获取数据时,如果发现数据不存在于缓存中,可以使用异步更新机制,先返回部分数据,并在后台异步地从数据库中获取完整的数据,并更新到缓存中。


6. 缓存雪崩处理:定期更新缓存的过期时间,避免缓存同时失效。同时,可以考虑使用分布式缓存和负载均衡策略,将请求分散到多个缓存节点上,避免单点故障。


以上方法可以结合使用,根据具体的业务场景和需求选择合适的解决方案。通过合理的缓存设计和缓存预热,可以有效地避免缓存穿透的问题。


0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交