思路:首先查询布隆里面数值,如果有则直接进行返回null,再查询redis,最后查询数据库 再将数据库数据添加到redis,如果为空,则添加到布隆过滤器里
pom 配置文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.17.6</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.0-jre</version>
</dependency>
编写配置连接池 (创建test1存储空数据)初始化test1
import org.redisson.config.Config;
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
/// redis有密码时打开
// config.useSingleServer().setPassword("123456");
config.useSingleServer().setDatabase(15);
RedissonClient client = Redisson.create(config);
RBloomFilter<Object> bloomFilter = client.getBloomFilter("test1");
//匹配错误率,和初始化数量
bloomFilter.tryInit(1_0000L, 0.01);
创建一个接口 (每次都会读取test1)
public class BloomFilterFactoryService implements BloomFilterFactory{
@Override
public RBloomFilter<Object> redisBollmConfig() {
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
config.useSingleServer().setDatabase(15);
RedissonClient client = Redisson.create(config);
RBloomFilter<Object> rBloomFilter = client.getBloomFilter("test1");
return rBloomFilter;
}
}
查询redis里面的test1有没有值
BloomFilterFactoryService bloomFilterFactoryService = new BloomFilterFactoryService();
RBloomFilter<Object> rBloomFilter = bloomFilterFactoryService.redisBollmConfig();
boolean contains = rBloomFilter.contains(productionNo);
//不存在的就是真,返回结果
if (contains) {
return tProductionTask;
}