什么场景使用布隆过滤器
主要用于判断一个元素是否在一个庞大的集合中。 比如:redis缓存击穿,垃圾邮件过滤等
什么是布隆过滤器
布隆过滤器:存储的数据结构是一个二进制位数组,将数据通过多个Hash函数,计算出多个Hash值,将Hash值对应在的数组的值置为1。当进行查询时,将数据按照上述方式进行计算,如果多个Hash值对应的数组的值都是1说明元素存在于集合,只要有一个不为1,说明不存在这个值。
示例
如图所示:集合{x,y,z}三个元素,元素经过Hash-1算法得到一个值,将这个值作为下标对应到数组中,更新值为1;再将Hash-1得出的值进行Hash-2算法的计算,得到一个值,同时将下标的值置为1。执行三次Hash算法。
这时候来查询w这个元素是否存在,通过三次Hash函数,计算出三个位置,发现有一个位置不是1,那么可以判定w这个元素不在集合中。
缺点
很明显这个布隆过滤器是有缺点的,不能完全保证判断是正确的,存在误判几率。而且删除非常困难(删除一个元素意味着有三个数组元素置为0,会影响到其他的判断)