布隆过滤器的用途相当广泛,它的作用对象是访问方和缓存,如下图
其存在目的是为了优化一个问题,我们在业务系统开发时,通常会加入缓存,如果缓存中没有我们想要的数据,我们就会到数据库中去查找,但是这种数据流向最容易发生的就是穿透和雪崩,因此布隆过滤器也就应运而生
布隆过滤器在访问方和缓存之间树立了一道墙,这道墙的本质是一个哈希函数,这个哈希函数有默认的,我们也可以自己指定,而这道墙的运作模式,就是每次访问方在访问一个数据的时候会先经过这道墙来映射出一个哈希值的结果, 这个哈希值是在我们向缓存中存放数据时生成的,用来表示数据存在是否为真,如果为真,则从缓存中读取数据,如果为假,则返回为空的结果,这样就大大降低了缓存穿透和雪崩的发生概率
但是布隆过滤器也存在一个弊端,被布隆过滤器判定为不存在的数据,那么100%不存在,但是如果被布隆过滤器判定为存在的数据,则不是100%存在
我给大家解释一下,这个弊端的意思,一个数据的哈希值是在这个数据被存放时,一并映射到布隆过滤器中的,如果缓存中不存在一个数据,那么很正常,100%不存在,但是如果被布隆过滤器判定存在,那么布隆过滤器的这个存在,结果会因为两种情况而发生错误,第一种情况是因为这个数据确实是存在过,但是它失效了,而布隆过滤器中没有删除这个数据存在的证据,第二种情况是在被访问这个数据,它的映射哈希值,恰巧和,存在的数据中某一个数据的哈希值相等,也就是说发生了哈希冲突,所以会发生布隆过滤器判定为存在的数据不一定是100%存在的问题