• 【布隆过滤器】基于Resisson的实现的布隆过滤器


    一.引入依赖

        <!-- redis -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
            <!-- redisson -->
            <dependency>
                <groupId>org.redisson</groupId>
                <artifactId>redisson</artifactId>
            </dependency>    
        <!-- springbootb版本 -->
         <dependency>

         <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-parent</artifactId>
         <version>2.2.6.RELEASE</version>
        
    </dependency>

    二.配置类

    import org.redisson.api.RBloomFilter;
    import org.redisson.api.RedissonClient;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import java.util.function.Predicate;
    
    /**
     * @author Sam.yang
     * @since 2021/7/30 10:10
     */
    @Configuration
    public class RedissonBloomFilterConfig {
    
        /**
         * 初始化设备信息布隆过滤器
         *
         * @param redissonClient {@link RedissonClient}
         * @return {@link RBloomFilter}
         */
        @Bean
        public RBloomFilter<String> getNnPcDeviceBloomFilter(@Autowired RedissonClient redissonClient) {
            //获取布隆过滤器
            RBloomFilter<String> nnPcDeviceFilter = redissonClient.getBloomFilter(CacheConstant.BLOOM_FILTER_DEVICE_CONSTANT);
            Predicate<RBloomFilter> predicate = rBloomFilter -> !nnPcDeviceFilter.isExists();
            //初始化布隆过滤器,注意这里必须要初始化,否则在使用的时候,会报错未初始化布隆过滤器,初始值5000000 是一个经验值,根据业务场景设置
            if (predicate.test(nnPcDeviceFilter)) {
                nnPcDeviceFilter.tryInit(5000000, 0.03);
            }
            return nnPcDeviceFilter;
        }
    
    }

    三.使用

        @Autowired
        @Qualifier(value = "getNnPcDeviceBloomFilter")
        private RBloomFilter<String> nnPcDeviceBloomFilter;
           exist = nnPcDeviceBloomFilter.contains(deviceId);
            if (!exist) {
             //业务逻辑,这里省略***********
            }
  • 相关阅读:
    百度地图生成器添加标注不显示
    为web文件夹添加IIS应用程序池用户权限
    SSL证书 .pem转.pfx
    sql获取表的所有字段及属性
    sql server不用安装sql管理工具开启sa
    asp.net mvc+webuploader大文件分片上传
    将WinForm程序(含多个非托管Dll)合并成一个exe的方法
    手机访问网站自动跳转到手机版
    c++和cuda混合编程 实现传统神经网络
    leetcode 338
  • 原文地址:https://www.cnblogs.com/july-sunny/p/15088071.html
Copyright © 2020-2023  润新知