ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用布隆过滤器防止缓存穿透

2021-12-05 17:35:09  阅读:130  来源: 互联网

标签:缓存 布隆 filter 攻击者 过滤器 数据


1.什么是缓存穿透?

缓存穿透指的是,攻击者在访问数据时,使用一些不存在的KEY访问我们的应用,

后端应会先在redis中去查找,由于查找不到数据,就会去数据库中获取数据,这样攻击者就可以透过缓存访问数据库。

因此数据库的压力会太大而导致应用崩溃。因此我们可以采用布隆过滤器防止这个问题。

 

2. 布隆过滤器的原理

布隆过滤器是先初始化一个大的二进制数组。

我们预先将数据库的ID数据,查找出来,对这个数组进行初始化,我们可以将数据进行hash,对数组的进行标记。

比如 010101000000,如果一个不存在的数据,提取的数据对应的bit 值为0 ,那么表示数据不存在,具体可以看网上的教程。

当然也有可能出现误判的情况,比如提取到的位数全部唯一,这种情况几率会很小。

 

比如攻击者将一个不存在的数据传过来,那么布隆过滤器判断这个ID不存在。直接返回就好。

 

3.实现代码

导入maven包。

 <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson-all</artifactId>
            <version>3.16.4</version>
        </dependency>

编写代码:

public static void main(String[] args) {
        Config config=new Config();

        config.useSingleServer().
                setAddress("redis://localhost:6379")
                .setPassword("redxun");
        RedissonClient client= Redisson.create(config);
        RBloomFilter<String> filter=client.getBloomFilter("bloom");
        filter.tryInit(1000000L,0.01);
        filter.add("1001");
        filter.add("1002");
        System.err.println(filter.contains("1001"));
        System.err.println(filter.contains("1004"));
    }

1.filter.add 这些代码应该在初始化布隆过滤器实现。

2.使用 filter.contains 是判断 指定的KEY是否存在。

 

标签:缓存,布隆,filter,攻击者,过滤器,数据
来源: https://www.cnblogs.com/yg_zhang/p/15646154.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有