问题
- 到底这两个东西的是什么,解决方法又是什么
缓冲雪崩
通俗解释:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期)
上面两种图就可以解释这个过程了。
解决方法
既然缓冲出现了问题,应该尽快恢复缓冲系统,再一个当大量的请求冲击服务器的时候可以使用像消息队列一样的中间件来解决,消息队列的一个作用就是削峰。
缓冲穿透
例如去缓冲中拿到某个的值,发现是null , 那么此时就前往数据库取,结果发现数据库中的数据也是null, 之后后面的请求也是按照这种步骤,这样缓冲相当于没用了。
解决的方式就是当数据库为null值赋予一个默认值,配上合理的过期时间,存入到缓冲中的,杜绝查库。
有很多种方法可以有效地解决缓存穿透问题,最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。
参考资料
- java后端技术公众号-缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题!