布隆过滤器

一、作用

布隆过滤器(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. 优点:(1)高效的插入和查询。因为不需要进行网络IO操作。(2)不存储具体的数据,所以占用空间小。
  2. 缺点:(1)查询可能存在误差,但是误差可控。(2)不支持删除操作。

五、使用方法

  1. 全量存储
  2. 请求拦截匹配
  3. 增量数据通过异步或同步方式存储到布隆过滤器中

六、布隆过滤器实现方案

1、Redisson:RBloomFilter

可以设置误判率,默认是0.03。

2、Guava:BloomFilter

可以设置误判率,默认是0.03。

 

posted @ 2023-06-28 17:11  翊梦  阅读(192)  评论(0)    收藏  举报