1.布隆过滤器是什么
布隆过滤器(Bloom Filter)是1970年由布隆提出的。是一种空间效率很高的概率数据结构,用于测试一个元素是否在一个集合中。
2.布隆过滤器的基本思想
位数组:布隆过滤器使用一个位数组,将其所有位初始化为0。
哈希函数:使用多个独立的哈希函数,将要插入的元素通过这些哈希函数得到多个位置,然后将这些位置在位数组中的对应位设置为1。
简单的理解为:布隆过滤器=位数组+一系列的hash函数
3.布隆过滤器的特点
有,是可能有(因为有hash冲突);无,是肯定无
4.布隆过滤器的优缺点
优点:
空间效率高,适合于存储大量数据。
插入和查询操作非常快速。
缺点:
存在误判(因为有hash冲突),即可能会错误地认为某个元素在集合中。
不能删除元素(标准的布隆过滤器),因为删除一个元素可能会影响到其他元素的查找结果。
5.布隆过滤器的使用场景
(1)解决缓存穿透问题
一般情况下,先查询Redis缓存,如果Redis中没有,再查询MySQL。当数据库中也不存在这条数据时,每次查询都要访问数据库,这就是缓存穿透。
在Redis前面添加一层布隆过滤器,请求先在布隆过滤器中判断,如果布隆过滤器不存在时,直接返回,不再反问Redis和MySQL。
如果布隆过滤器中存在时,再访问Redis,再访问数据库。
(2)黑名单验证
用于快速判断某个IP地址是否在黑名单中。
(3)去重
在数据流处理中用于检测是否已经处理过某个元素。