布隆过滤器bloomFilter实现黑名单功能
布隆过滤器介绍
数据结构:bit数组
写:key的不同哈希函数生成多个哈希值,每个哈希值指向的位置值变为1
查:指向的位置都为0,表示元素一定不在
指向的位置都为1,表示元素可能存在,也可能是别的元素指向此处
由于应用中,大部分场景不是黑名单,所以在判断是否为黑名单时,可以分为两步
1、在布隆过滤器中查询是否有key
若没有,则一定是白名单
2、若有,不一定是黑名单,需要再向数据库请求,查看真实的状态
RBloomFilter<Object> bloomFilter = redissonClient.getBloomFilter(PersonalRedisConstant.Personal_BLACK_BLOOM_FILTER);
// 指定长度、误差率
bloomFilter.tryInit(1000000L, 0.03);
// 写入
bloomFilter.add(searchMark);
// 查询是否存在
boolean contains = blackBloomFilter.contains(searchMark);

浙公网安备 33010602011771号