布隆过滤器

  1. 用途:解决redis缓存穿透的问题----缓存击穿和缓存雪崩都是缓存穿透的特殊体现。

  2. 依赖:
    <!--布隆过滤器-->
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>22.0</version>
            </dependency>
  3. 测试代码:
    public static void main(String[] args) {
            BloomFilter<Integer> filter = BloomFilter.create(Funnels.integerFunnel(),
                    5000, 0.01);
            // 往过滤器中塞入数据
            filter.put(1);
            filter.put(2);
            filter.put(3);
    
            // 判断某一数据是否存在
            boolean mightContain = filter.mightContain(1);
    
            // mightContain = true  存在
            System.out.println(mightContain);
        }
  4. 特点:
    布隆过滤器标识
    存在的数据,不一定存在
    不存在的数据,一定不存在
    以空间换取得来的
    就是一个Byte数组
  5. 项目中实现:
    将数据库返回的数据存储到布隆过滤器中,前端请求的时候先走过滤器判定,替数据库阻挡一些拦截,减少数据库的请求压力。

     

     理论上数组大小越大越好,但是也要考虑实际的项目数据量,避免过大的内存空间占用率。

posted @ 2021-05-06 22:10  土木转行的人才  阅读(75)  评论(0编辑  收藏  举报