布隆过滤器

类似于一个hase set 用来判断某个元素(key)是否存在于某个集合中

布隆过滤器说这个数据不存在,这个数据就一定不在

布隆过滤器说这个数据存在,这个数据也不一定就在,只是可能在

核心:使用一个数组,把关键词输入到几个哈希函数(不只是一个哈希函数,输入到一个哈希函数里面得到一个数,输入到多个哈希函数就得到一组数)里面,得到一组数,将数组上对应的位置改为1

是一个数据结构

用来判断某个元素是否在集合内

运行快速,内存占用小

但是高效插入和查询的代价就是:这是一个基于概率的数据结构,它只能告诉我们一个元素绝对不再集合内,或者可能在集合内   (也就是说,布隆过滤器判断不存在,数据库中一定不存在,布隆过滤器中判断存在,只能说明可能存在)             

布隆过滤器的基础结构就是一个wait数组,假设这个数组大小为16,每个位置默认起始为0

将Fredy这个key写入数据库

假设这个布隆过滤器有3个哈希函数,将Fredy输入到这三个哈希函数,分别得到三个值1,3,7

将这三个位置上的值置为1

 此时,我们又把Eli录入数据库,将Eli输入到这三个哈希函数,分别得到三个值10,12,15

现在查询Tom这个词在不在数据库里面:

将tom这个词输入到三个哈希函数里面,得到0,2,5,发现数组中这三个位置都是0,不是1,说明数据库中不含有tom这个词

如果查询Lily,将Lily这个词输入到三个哈希函数里面,得到7,12,15,这三个位置上都是1,但是数据库中其实并没有Lily这个词

java中使用布隆过滤器:

先引入redisson组件的依赖

        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson-all</artifactId>
            <version>3.16.0</version>
        </dependency>
public class Test
{
    public static void main(String[] args)
    {
        //连接redis数据库
        Config config=new Config();
        config.useSingleServer().setAddress("redis://127.0.0.1:6379");
        RedissonClient redisson= Redisson.create(config);

        //给这个布隆过滤器起个名字
        RBloomFilter<String> bloomFilter=redisson.getBloomFilter("test");

        //初始化这个布隆过滤器,预计里面装100 0000L一百万个数据
        //误判率为1%(最大允许为1%,这个数值如果设置的太小,虽然会降低误判率,但是会产生更多次的哈希操作,降低系统性能)
        bloomFilter.tryInit(1000000L,0.01);

        //增加一个字符串进入布隆过滤器
        bloomFilter.add("ouyangshuiming");

        System.out.println(bloomFilter.contains("ouyangshuiming"));  //输出true
        System.out.println(bloomFilter.contains("zhangsan"));   //输出false
    }
}

这里误判率为1%,表示最大允许误判1%,这个数值如果设置的太小,虽然会降低误判率,但是会产生更多次的哈希操作,降低系统性能

也就是说:布隆过滤器认为这个元素不存在,一定不存在,布隆过滤器认为这个元素存在,有1%的概率错误判断

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值