一、作用
布隆过滤器(BloomFilter)可以用于检索一个元素是否存在于一个集合中。
二、底层数据结构
bitmap(位图):相当于是一个以bit位为单位的数组,数组中每个单元只能存储二进制数0或1。
- 存储数据:通过多个hash函数,根据hash计算数组对应的位置改为1。
- 查询数据:使用相同hash函数获取到多个hash值,判断对应位置是否全都为1。
三、误判问题
布隆过滤器会存在误判问题。某个本不存在的KEY被认为是存在的。
如下图所示:id=1命中位置0,3,6,id=3命中位置8,11,14。id=3命中位置6,8,11,尽管id=3是不存在的,但是布隆过滤器会误认为id=3是存在的。
误判率:数组越小误判率越大,数组越大误判率越小,但是同时带来了更多的内存消耗。
四、优缺点
- 优点:(1)高效的插入和查询。因为不需要进行网络IO操作。(2)不存储具体的数据,所以占用空间小。
- 缺点:(1)查询可能存在误差,但是误差可控。(2)不支持删除操作。
五、使用方法
- 全量存储
- 请求拦截匹配
- 增量数据通过异步或同步方式存储到布隆过滤器中
六、布隆过滤器实现方案
1、Redisson:RBloomFilter
可以设置误判率,默认是0.03。
2、Guava:BloomFilter
可以设置误判率,默认是0.03。
标签:hash,误判,布隆,数组,过滤器,id From: https://www.cnblogs.com/aleda-territory/p/17415868.html