美文网首页
SpringBoot 如何集成 Redis 实现布隆过滤器

SpringBoot 如何集成 Redis 实现布隆过滤器

作者: 呆小鱼LQ | 来源:发表于2023-09-20 00:49 被阅读0次

前言

本篇文章的代码示例已放到 github 上,Git地址为:advance(记录每一个学习过程),项目的介绍页面是我所有文章的一个引用目录,大家在引用目录里面即可找到对应文章的一个代码路径。

大家觉得有用的话,麻烦点个star👍再走呗!

使用场景

针对 Redis 的缓存穿透问题,布隆过滤器是一个常见的解决办法。在单机的场景下,我们可以使用谷歌的 guava 包里面提供的布隆过滤器。在分布式的场景下,我们也可以选用 Redis 来实现布隆过滤器。

虽然,Redis 的 BitMap天然就可以作为 布隆过滤器来实现,但毕竟自己实现的话,还是会有点麻烦。因此,我们可以选用 redisson 提供的布隆过滤器,提高我们的开发效率。

常用方法

配置布隆过滤器的Bean

@Bean
public RBloomFilter<String>  bloomFilter(){
    // 定义一个布隆过滤器,指定布隆过滤器的名称
    RBloomFilter<String> bloomFilter = redissonClient.getBloomFilter("bloomTest");
    //定义布隆过滤器的大小,以及误差率
    bloomFilter.tryInit(100000L, 0.003);
    return bloomFilter;
}

获取布隆过滤器

配置完之后,这个布隆过滤器就在 Spring 容器里面了,可以直接注入进来

@Autowired
private RBloomFilter<String> bloomFilter;

添加元素

String name1 = "小明";
String name2 = "小张";
bloomFilter.add(name1);
bloomFilter.add(name2);

判断布隆过滤器中是否存在某元素

boolean flag1 = bloomFilter.contains("小明");
System.out.println("布隆过滤器中是否可能有小明?" + flag1);

获取布隆过滤器的元素总数

System.out.println("当前布隆过滤器中有多少个数?" + bloomFilter.count());

获取布隆过滤器预计可以插入多少个数

System.out.println("预计布隆过滤器中可以插入多少个数?" + bloomFilter.getExpectedInsertions());

获取布隆过滤器的容错率

System.out.println("布隆过滤器的容错率:" + bloomFilter.getFalseProbability());

获取哈希函数的个数

System.out.println("布隆过滤器哈希哈数的个数:" + bloomFilter.getHashIterations());

获取 Bit 位的个数

System.out.println("布隆过滤器的bit位有多少个?" + bloomFilter.getSize());

使用示例

@Component
public class LineRunner implements CommandLineRunner {
    @Autowired
    private RBloomFilter<String> bloomFilter;

    @Override
    public void run(String... args) throws Exception {
        String name1 = "小明";
        String name2 = "小张";
        bloomFilter.add(name1);
        bloomFilter.add(name2);
        boolean flag1 = bloomFilter.contains("小明");
        System.out.println("布隆过滤器中是否可能有小明?" + flag1);
        boolean flag2 = bloomFilter.contains("小李");
        System.out.println("布隆过滤器中是否可能有小李?" + flag2);
        System.out.println("当前布隆过滤器中有多少个数?" + bloomFilter.count());
        System.out.println("预计布隆过滤器中可以插入多少个数?" + bloomFilter.getExpectedInsertions());
        System.out.println("布隆过滤器的容错率:" + bloomFilter.getFalseProbability());
        System.out.println("布隆过滤器哈希哈数的个数:" + bloomFilter.getHashIterations());
        System.out.println("布隆过滤器的bit位有多少个?" + bloomFilter.getSize());
    }
}

相关文章

  • redis插件安装-bloom模块

    布隆过滤器 Redis 官方提供的布隆过滤器到了 Redis 4.0 提供了插件功能之后才正式登场。布隆过滤器作为...

  • Redis-001、安装布隆过滤器

    一、在Redis上安装布隆过滤器 二、Redis的布隆过滤器使用

  • 布隆过滤器

    布隆过滤器 布隆过滤器不是专属于redis,此处是用来和 redis 结合使用。 1、场景 我们用 HyperLo...

  • kata05:布隆过滤器

    这次kata的内容:实现一个布隆过滤器 布隆过滤器 (Bloom Filter) 什么是布隆过滤器呢?简单来说, ...

  • 6.布隆过滤器

    Redis Modules[https://redis.io/modules] Redis 扩展组件库,布隆过滤器...

  • 布隆过滤器

    布隆过滤器起源 为什么我们要用布隆过滤器? 布隆过滤器是在海量数据找到想要的结果,经常应用于redis的缓存穿透(...

  • 2020-11-02-数据结构与算法-13(布隆过滤器)

    1.java代码实现布隆过滤器 2.Google开源 Guava 自带的布隆过滤器 (依赖)

  • Java知识框架 - 缓存

    分布式缓存 - Redis跳跃表 - 每个节点中维持多个指向其他节点的指针Redis布隆过滤器Lua脚本实现原子操...

  • redis 的bloomfilter

    详解布隆过滤器的原理、使用场景和注意事项 布隆过滤计算器 布隆过滤器(Bloom Filter)详解 java实现...

  • 面试题 延伸 之 布隆去重的原理及实现

    什么情况下需要布隆过滤器? 布隆过滤器原理 布隆过滤器(Bloom Filter)的核心实现是一个超大的位数组和几...

网友评论

      本文标题:SpringBoot 如何集成 Redis 实现布隆过滤器

      本文链接:https://www.haomeiwen.com/subject/uduovdtx.html