什么是缓存穿透
缓存穿透其实很好理解.正常来说我们在数据库里存的数据,比如id都是从1开始,然后递增的。那现在如果有一个用户要访问id是-1的这么一条数据,首先去缓存中查看,缓存中发现没有id=-1的数据,然后去数据库中查看,发现数据库中也没有id=-1的数据。如果这样不合理的请求,也就是我们数据库中不存在的数据。有一个两个这样的非法请求,我们数据库抗住还是没问题的,但是如果这样不合理的请求多了,上升到好几千,这里应该就是被**“攻击了”**,那很可能我们的数据库就挂掉了.
那如何防止这种情况的发生呢?
解决方案
1、我们可以在接口层那边对参数做一个校验,如果参数不合法,比如id<0的这种,我们直接就给返回空就可以,不用再去数据库中查找了。也给数据库减小了压力.
2、对查询结果为空的情况也进行缓存,这样,再次访问时,缓存层会直接返回空值。缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。
3、布隆过滤器。关于布隆过滤器我会在下一篇文章中详细讲解一下,这里大家先知道,布隆过滤器可以解决缓存穿透的问题.