:::info
redis实现布隆过滤器是基于bitmap实现的,bitmap:Bitmap详解
布隆过滤器的原理:布隆过滤器(BloomFilter)
:::
Redission是什么
基于高性能异步无锁Java Redis客户端和Netty框架。
github:https://github.com/redisson/redisson
引入依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.16.0</version>
</dependency>
如果是使用springboot框架,redisson有提供的sporingboot starter使用,可以引入下面这个依赖
<!-- redisson -->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.10.4</version>
</dependency>
读取配置
spring:
redis:
host: 192.168.1.241
port: 6379
password: anin
database: 0
@Data
@Component
@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
private String host = "localhost";
private Integer port = 6379;
private Integer database = 0;
private String password = "";
}
Redisson配置
@Configuration
public class RedissonConfig {
@Autowired
private RedisProperties redisProperties;
@Bean
public RedissonClient redissonClient() {
Config config = new Config();
String redisUrl = String.format("redis://%s:%s", redisProperties.getHost() + "", redisProperties.getPort() + "");
config.useSingleServer().setAddress(redisUrl).setPassword(redisProperties.getPassword());
config.useSingleServer().setDatabase(redisProperties.getDatabase());
return Redisson.create(config);
}
}
测试代码
@RestController
public class RedissonBloomFilter {
@Autowired
private RedissonClient redissonClient;
@GetMapping("/init")
private void init() {
RBloomFilter<Object> f1 = redissonClient.getBloomFilter("f4");
f1.tryInit(1000000, 0.03);
for (int i = 0; i < 1000000; i++) {
f1.add(i);
}
}
@GetMapping("/test")
public void test(){
RBloomFilter<Object> f1 = redissonClient.getBloomFilter("f4");
System.out.println(f1.contains(10086));
System.out.println(f1.contains(1000000));
System.out.println(f1.getSize());
}
}
init是初始化方法,初始化了容量为一百万,错误率为0.03的布隆过滤器,并且往进添加了100万条数据。
test则是测试方法。判断了10086是否包含在布隆过滤中,1000000是否在布隆过滤器中以及布隆过滤器的大小。
输出
true
false
7298440