springboot集成guava布隆过滤器

1.创建springboot项目,引入maven依赖

bash 复制代码
		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
			<version>23.0</version>
		</dependency>

2.创建guava布隆过滤器

bash 复制代码
@Component
public class GuavaFilter {
    //初始化一个常量
    public static final int _1W = 10000;
    //初始化guava过滤器的容器容量
    public static final int SIZE = 100 * _1W;
    //误报率
    public static double  fpp = 0.03;  //误报率
    //创建一个guava过滤器
    public static BloomFilter bloomFilter = BloomFilter.create(Funnels.integerFunnel(),SIZE,fpp);


    //向guava过滤器中添加100万个数据
    //验证不在这100万数据之外的10万个数据的误判率
    @PostConstruct
    public void guavaFilter(){
        for(int i=1;i<=SIZE;i++){
            bloomFilter.put(i);
        }
        List<Integer> list = new ArrayList<>();
        for(int i = SIZE+1;i<SIZE+10*_1W;i++){
            if(bloomFilter.mightContain(i)){
                System.out.println(i + "被误识别了");
                list.add(i);
            }
        }
        System.out.println("误识别个数为:" + list.size());
    }
}

3.启动程序,观察结果

误识别的个数为3033个,误识别率3033/1000000≈0.03

4.对于误判率的思考

代码里配置的误判率为0.03,这里就会有小伙伴问,误判率(hash冲突概率)不应该越低越好吗,那我配置成0.01或者0.00000000001可以吗?

我们debug一下guava布隆过滤器的源码,点进去这个creat方法,断点打到如下图所示的位置

我们先看误报率配置0.03的情况

想要误报率控制在0.03,比特数组的位数需要达到7298440并且使用5种hash算法

再看误报率配置0.01的情况

想要误报率控制在0.01,比特数组的位数需要达到9585058并且使用7种hash算法

再看误报率配置0.00000000001的情况

想要误报率控制在0.00000000001,比特数组的位数需要达到52717821并且使用37种hash算法

当我们把误报率配置成0.00000000001,重新启动下程序

5.布隆过滤器的数据流向

相关推荐
那我掉的头发算什么1 小时前
【图书管理系统】基于Spring全家桶的图书管理系统(上)
java·服务器·数据库·spring boot·后端·spring·mybatis
大数据基础2 小时前
基于 Hadoop MapReduce + Spring Boot + Vue 3 的每日饮水数据分析平台
大数据·vue.js·hadoop·spring boot·数据分析·maven·mapreduce
苍何10 小时前
字节发力,豆包大模型2.0 震撼来袭(附 Trae 实测)
后端
苍何10 小时前
不会剪辑的人,开始用 AI 批量出爆款了
后端
苍何10 小时前
百度 APP 正式接入 OpenClaw,所有人限时免费!
后端
Volunteer Technology12 小时前
DynamicTP动态线程池(四)
java·spring boot·后端·spring
野犬寒鸦12 小时前
从零起步学习并发编程 || 第九章:Future 类详解及CompletableFuture 类在项目实战中的应用
java·开发语言·jvm·数据库·后端·学习
uzong12 小时前
软件工程师应该尽量改掉的坏习惯
后端
前路不黑暗@12 小时前
Java项目:Java脚手架项目的统一模块的封装(四)
java·开发语言·spring boot·笔记·学习·spring cloud·maven