谈谈缓存穿透、击穿、雪崩的区别,又如何去解决?

发布时间:2024-03-15 13:22:17
 

面试题分析

这道题主要考察的是求职者是否具有高并发思维,它也是在面试中一道高频的考点

缓存穿透

缓存穿透代表的意思是在我们的缓存中没有找到缓存信息,那么我们在高并发场景下就会面临所有的请求都会直接打到DB,缓存则失去了它原本的意义,并且极有可能导致数据库压力过大而造成服务不可用。

  • 缓存空结果信息
  • 布隆过滤器(不存在的一定不存在,存在的可能不存在,通过bitmap实现,想深入布隆过滤器可以专门去看看这部分专题内容)
  • 过滤常见非法参数,拦截大部分无效请求()

缓存击穿

缓存击穿代表的意思是我们数据库中存在数据,但是缓存中不存在数据.这种场景一般是在缓存失效时发生的. 在高并发的场景下极有可能瞬间打垮数据库.

  • 我们可以考虑面对请求量大的热点接口直接将缓存设置永不过期.
  • 当然我们也可能碰到一些特殊场景不能设置永久缓存,那么我们可以在db为空时设置互斥锁,当查询完db更新至缓存时再释放锁

缓存雪崩

缓存雪崩代表是意思是我们在某一个时间段,碰到大量热点缓存数据过期导致大量请求直接打垮数据库

  • 我们可以考虑面对请求量大的热点接口直接将缓存设置永不过期.
  • 缓存过期时间可以设置一个随机的波动值,防止大量数据在同一时间过期

 
上一篇 Redis如何保证与数据库的双写一致性
下一篇 10分钟带你了解灰度发布

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题