我们可以把布隆过滤器理解为一个白名单或者是一个黑名单,因为它的主要作用就是判断一个元素存不存在于这个过滤器里面,就可以变相的理解这个过滤器是一个白名单或者是一个黑名单。我们把数据放到了一个白名单里或者放到一个黑名单里,然后再去判断某个数据是否存在于这个白名单或者黑名单里。
1.布隆过滤器作为白名单
1.1 白名单的流程图
第一步:前端发起了一个查询请求,通过参数key去查询
第二步:参数key会经过一个布隆过滤器,如果这个key不存在于这个过滤器里面,也就是不存在于这个白名单里面,那么就会被过滤器拦截住,然后直接返回这个空数据给前端;如果存在于过滤器里面就会往下执行,会把这个请求发到redis
第三步:如果redis里面存在这个key,就把key对应的数据返回给前端;如果redis里面不存在这个key,就会去数据库里面查询
第四步:如果数据库里面存在这个数据,就会把这个数据更新到redis里面,同时会把这个数据返回给前端;如果数据库里面不存在这个数据,就会直接返回一个空对象给前端
这里还有一条路线,但是这条路线是走不通的,因为如果这个数据库里面不存在这个key,那就说明布隆过滤器过滤器它存在了误判,错误的判断了这个key存在于这个白名单,然后让请求打到了redis,然后再打到了这个数据库,结果查询了一圈发现这个数据根本就没有。
白名单(布隆过滤器)存在的问题:
布隆过滤器里的数据,存在误判,如果没在白名单里的数据被误判存在于过滤器里的话,会穿透到数据库,不过误判的几率本来就很小,所以穿透问题不大