谈谈缓存穿透、击穿、雪崩的区别,又如何去解决?
面试题分析
这道题主要考察的是求职者是否具有高并发思维,它也是在面试中一道高频的考点
缓存穿透
缓存穿透代表的意思是在我们的缓存中没有找到缓存信息,那么我们在高并发场景下就会面临所有的请求都会直接打到DB,缓存则失去了它原本的意义,并且极有可能导致数据库压力过大而造成服务不可用。
- 缓存空结果信息
- 布隆过滤器(不存在的一定不存在,存在的可能不存在,通过bitmap实现,想深入布隆过滤器可以专门去看看这部分专题内容)
- 过滤常见非法参数,拦截大部分无效请求()
缓存击穿
缓存击穿代表的意思是我们数据库中存在数据,但是缓存中不存在数据.这种场景一般是在缓存失效时发生的. 在高并发的场景下极有可能瞬间打垮数据库.
- 我们可以考虑面对请求量大的热点接口直接将缓存设置永不过期.
- 当然我们也可能碰到一些特殊场景不能设置永久缓存,那么我们可以在db为空时设置互斥锁,当查询完db更新至缓存时再释放锁
缓存雪崩
缓存雪崩代表是意思是我们在某一个时间段,碰到大量热点缓存数据过期导致大量请求直接打垮数据库
- 我们可以考虑面对请求量大的热点接口直接将缓存设置永不过期.
- 缓存过期时间可以设置一个随机的波动值,防止大量数据在同一时间过期
![](/images/780-200-2.jpg)