:::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.241port: 6379password: anindatabase: 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配置
@Configurationpublic class RedissonConfig {@Autowiredprivate RedisProperties redisProperties;@Beanpublic 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);}}
测试代码
@RestControllerpublic class RedissonBloomFilter {@Autowiredprivate 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是否在布隆过滤器中以及布隆过滤器的大小。
输出
truefalse7298440
