布隆过滤器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);

  

posted @ 2023-03-10 10:18  joel1889  阅读(357)  评论(0)    收藏  举报