首页 > 其他分享 >布隆过滤器(Bloom Filter)

布隆过滤器(Bloom Filter)

时间:2022-10-31 16:25:23浏览次数:35  
标签:skuBloomFilter 布隆 RBloomFilter Filter 过滤器 Bloom public

布隆过滤器(Bloom Filter)

​ 布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。

布隆过滤器的基本思想

存储方式也是十分巧妙的,可以采用位数组的方式,不直接存储元素,而是存储元素是否存在的状态,这样就可以节约大量的存储空间~

在取出的时候也是相同道理

Redission 布隆过滤器:

依赖

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-redis</artifactId>
 </dependency>
 <!-- https://mvnrepository.com/artifact/org.redisson/redisson-spring-boot-starter -->
 <dependency>
     <groupId>org.redisson</groupId>
     <artifactId>redisson-spring-boot-starter</artifactId>
     <version>3.17.6</version>
 </dependency>

配置类(配置redis和布隆过滤器相关)

@Configuration
public class BloomFilterConfig {
    @Autowired
    public RedissonClient redissonClient;

    @Bean
    public RBloomFilter skuBloomFilter(){
        //指定布隆过滤器的名称
        RBloomFilter<Long> bloomFilter=redissonClient.getBloomFilter(RedisConst.BLOOM_SKU_ID);
        //初始化布隆过滤器大小与容错率
        bloomFilter.tryInit(10000,0.001);
        return bloomFilter;
    }
}

开启一个定时任务向布隆过滤器中添加数据(利用一个请求来模仿的定时任务)

@RestController
@RequestMapping("/init")
public class BloomController {
    @Autowired
    private SkuInfoService skuInfoService;
    @Autowired
    private RBloomFilter skuBloomFilter;
    //TODO 定时任务 同步数据库与布隆过滤器的内容
    @GetMapping("/sku/bloom")
    public String skuBloom() {
        //如果数据库有变化
        skuBloomFilter.delete();
        //初始化布隆过滤器大小与容错率
        skuBloomFilter.tryInit(10000,0.001);

        //1.加载数据库中所有的id
        QueryWrapper<SkuInfo> wrapper = new QueryWrapper<>();
        wrapper.select("id");
        List<SkuInfo> skuInfoList = skuInfoService.list(wrapper);
        for (SkuInfo skuInfo : skuInfoList) {
            Long skuId = skuInfo.getId();
            //把它放入过滤器中
            skuBloomFilter.add(skuId);
        }
        return "success";
    }
}

在业务中使用

 @Autowired
    private RBloomFilter skuBloomFilter
    
    
boolean flag = skuBloomFilter.contains(skuId);

标签:skuBloomFilter,布隆,RBloomFilter,Filter,过滤器,Bloom,public
From: https://www.cnblogs.com/xuzhidong/p/16844673.html

相关文章

  • 处理敏感字、js 正则过滤敏感词mint-filter
    如何使用js过滤敏感词在字符串中有敏感字就打几个*号来代替vars="夜黑风高夜,在小树林我里个去,你大爷的";varreg=/我里个去|你大爷的/g;s=s.replace(r......
  • Servlet-4-Filter02
    文章目录​​1.Filter和Servlet的执行顺序​​​​2.多个Filter的执行和注册顺序相同​​​​3.多个注册的和直接建立的在一起​​1.Filter和Servlet的执行顺序当让是Servle......
  • Servlet-3-Filter01
    文章目录​​1.Filter是Servlet规范的三大组件之一(不用导包)​​​​2.怎么创建Filter​​​​方法1:​​​​方法2:直接右击创建一个Filter​​​​3.Filter的生命周期​​......
  • 【C#进阶】.NET Core 中的筛选器 Filter
    官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/mvc/controllers/filters?view=aspnetcore-5.0 通过使用ASP.NETCore中的筛选器,可在请求处理管道中的特定阶......
  • Javaweb基础复习------Filter相关应用+登录验证案例的使用
    Filter(过滤器)基本步骤:1、定义类,实现Filter接口,并重写其所有方法2、配置Filter拦截资源的路径,在类上定义2WebFilter注解(WebFilter配置的路径,是拦截资源的路径)3、在d......
  • Java安全之Tomcat6 Filter内存马
    Java安全之Tomcat6Filter内存马回顾Tomcat8打法先回顾下之前Tomcat789的打法这里先抛开78之间的区别,在8中,最后add到filterchain的都是一个filterconfig对象Applica......
  • Istio(七):ServiceEntry,sidecar,Envoy Filter
    目录一.模块概览二.系统环境三.ServiceEntry四.sidecar4.1Sidecar4.2工作负载选择器4.3入口和出口监听器五.EnvoyFilter5.1EnvoyFilter一.模块概览使用ServiceEntr......
  • 【Vue】问题:TypeError: vite.createFilter is not a function
    问题内容➜vite-vue3npmrundev>[email protected]>vitefailedtoloadconfigfrom/vite-vue3/vite.config.tserrorwhenstartingdevserver:TypeError:vite.c......
  • 1_js中过滤器filter简单实现
    filterAPI自实现我感觉这个API我用起来不是很顺畅我自己写一个看看分析这是api参考手册设计思路抛开其他的不谈,filter本质上就是原型Array上的一个函数==ap......
  • java-guava 布隆筛选器用法及比较
    java-guava布隆筛选器用法及比较布隆筛选器使用场景:   一般用于一个字符串是否存的预测,如爬虫是否抓取过这个URL等。优点:   对于特大的集合来说,检索快、占用内......