概念

缓存雪崩、缓存穿透是数据库中有对应数据的情况,而缓存穿透发生的情境下,缓存没有该数据、数据库也没有该数据,那就代表着请求无法在访问数据库获取数据之后写入缓存中,意味着缓存形同虚设,所有的请求都会到达数据库,但实际上这些请求都是无效的。

引发缓存穿透的原因:

① 业务层误操作,导致数据库和缓存中的数据被删除掉,而请求还是源源不断地进来;
② 恶意攻击,攻击者伪造不存在的key,进行大量的访问,导致缓存穿透。

解决手段:

① 对于首次访问在数据库、缓存中均不存在的数据,缓存一个空值或者0值到中间件,后续的访问就不会打到数据库上,只是请求了缓存,这时要注意设置值的问题,如果是库存之类的应该设置为0;
② 增加一层布隆过滤器,对值的存在情况进行判断,布隆过滤器可以针对值不存在的情况精确的返回判断结果,因此我们可以先请求布隆过滤器,如果判断数据不存在,那么无需进入后续的处理流程,直接在这里返回空值/默认值即可,避免请求到达数据库;
③ 在业务层进行拦截,对于不合法的参数、不合法的请求等进行拦截,不让其进入后续流程;