:::info redis实现布隆过滤器是基于bitmap实现的,bitmap:Bitmap详解
布隆过滤器的原理:布隆过滤器(BloomFilter) :::

Redission是什么

基于高性能异步无锁Java Redis客户端和Netty框架。
github:https://github.com/redisson/redisson

引入依赖

  1. <dependency>
  2. <groupId>org.redisson</groupId>
  3. <artifactId>redisson</artifactId>
  4. <version>3.16.0</version>
  5. </dependency>

如果是使用springboot框架,redisson有提供的sporingboot starter使用,可以引入下面这个依赖

  1. <!-- redisson -->
  2. <dependency>
  3. <groupId>org.redisson</groupId>
  4. <artifactId>redisson-spring-boot-starter</artifactId>
  5. <version>3.10.4</version>
  6. </dependency>

读取配置

  1. spring:
  2. redis:
  3. host: 192.168.1.241
  4. port: 6379
  5. password: anin
  6. database: 0
  1. @Data
  2. @Component
  3. @ConfigurationProperties(prefix = "spring.redis")
  4. public class RedisProperties {
  5. private String host = "localhost";
  6. private Integer port = 6379;
  7. private Integer database = 0;
  8. private String password = "";
  9. }

Redisson配置

  1. @Configuration
  2. public class RedissonConfig {
  3. @Autowired
  4. private RedisProperties redisProperties;
  5. @Bean
  6. public RedissonClient redissonClient() {
  7. Config config = new Config();
  8. String redisUrl = String.format("redis://%s:%s", redisProperties.getHost() + "", redisProperties.getPort() + "");
  9. config.useSingleServer().setAddress(redisUrl).setPassword(redisProperties.getPassword());
  10. config.useSingleServer().setDatabase(redisProperties.getDatabase());
  11. return Redisson.create(config);
  12. }
  13. }

测试代码

  1. @RestController
  2. public class RedissonBloomFilter {
  3. @Autowired
  4. private RedissonClient redissonClient;
  5. @GetMapping("/init")
  6. private void init() {
  7. RBloomFilter<Object> f1 = redissonClient.getBloomFilter("f4");
  8. f1.tryInit(1000000, 0.03);
  9. for (int i = 0; i < 1000000; i++) {
  10. f1.add(i);
  11. }
  12. }
  13. @GetMapping("/test")
  14. public void test(){
  15. RBloomFilter<Object> f1 = redissonClient.getBloomFilter("f4");
  16. System.out.println(f1.contains(10086));
  17. System.out.println(f1.contains(1000000));
  18. System.out.println(f1.getSize());
  19. }
  20. }

init是初始化方法,初始化了容量为一百万,错误率为0.03的布隆过滤器,并且往进添加了100万条数据。
test则是测试方法。判断了10086是否包含在布隆过滤中,1000000是否在布隆过滤器中以及布隆过滤器的大小。

输出

  1. true
  2. false
  3. 7298440