在并发很大的情况下,使用缓存能很大程度上缓解服务器和数据库层的压力,然而随着技术的发展,缓存也暴露除了很多问题,比如说:缓存穿透、缓存雪崩、缓存并发、缓存失效、数据一致性问题,今天就缓存穿透问题做一下分析和给出具体的解决方案...而缓存穿透就是很多可以断定不存在查询结果的请求或者非法恶意攻击请求,频繁查询数
据库,给数据库造成压力甚至拖垮数据库....分析
之所以存在缓存穿透,是因为我们在使用缓存的场景下,大多数只缓存有效结果,也就是只缓存数据库真是存在的数据,而对于查询结果为null的数据是没有缓存的,这样每一次返回null的请求都会到数据库中查询...一种极端的情况下,可以对这些接口做恶意非法请求,导致大部分连接不可用,拖垮数据库
解决方案
针对缓存穿透,有很多解决方案,最常用的就是一下两种:
1)缓存为null的查询结果,将null...有效查询条件测试
缓存中没有查到数据,去DB中查询
DB中查到数据,做转换后放入缓存
第二次有效查询,从缓存中查询出有效数据直接返回
总结
至此,我们已经使用缓存存储null值的方式解决了缓存穿透的问题