如果在请求数据时,在缓存层和数据库层都没有找到符合条件的数据,也就是说,在缓存层和数据库层都没有命中数据,那么,这种情况就叫作缓存穿透。
第一种解决方案:就是把缓存起来。当第一次从数据库中查询出来的结果为空时,我们就将这个空对象加载到缓存,并设置合理的过期时间,这样,就能够在一定程度上保障后端数据库的安全
第二种方案加布隆过滤器,阻断这种key访问redis和数据库。也就是在redis和数据库前加一个过滤器,将所有存在的数据hash到一个足够大的位图中(bitmap)。当客户端请求过来时,先判断布隆过滤器中是否存在key, 如果不存在,直接阻拦。这样就不用访问redis和数据库了。