布隆过滤器

源于蚂蚁课堂的学习,点击这里查看(老余很给力) 

布隆过滤器是指,用于判断集合中是否存在某一个元素的快速定位思想
适用于判断某个数据是否在集合中存在,不一定百分百准备, Bloom Filter基本实现原理采用位数组与联合函数一起实现
其内部维护了一个二进制数组,计算key的三个hash值,当三个值对应下标位置处的状态都为1,表明此key存在于集合中。
故而,当数组长度短时,其误判的几率特别大

maven依赖


    com.google.guava
    guava
    22.0

 Java案例

public class BlongTest {
    /**
     * 在布隆中存放100万条数据
     */
    private static Integer size = 1000000;

    public static void main(String[] args) {
        // 0.01表明误判的几率
        BloomFilter integerBloomFilter = BloomFilter.create(Funnels.integerFunnel(), size, 0.01);
        for (int i = 0; i < size; i++) {
            integerBloomFilter.put(i);
        }
        // 从布隆中查询数据是否存在
        ArrayList strings = new ArrayList<>();
        for (int j = size; j < size + 10000; j++) {
            if (integerBloomFilter.mightContain(j)) {
                strings.add(j);
            }
        }
        System.out.println("误判数量:" + strings.size());

    }
}

基于布隆过滤器解决Redis击穿问题 

我们可以在程序启动后,先将数据库中的key放入布隆过滤器中,缓存至jvm内存。
然后在使用key访问Redis前,先进行布隆过滤,不存在布隆过滤器中,则判断为恶意攻击

欢迎大家和帝都的雁积极互动,头脑交流会比个人埋头苦学更有效!共勉!

公众号:帝都的雁

布隆过滤器_第1张图片

你可能感兴趣的:(redis)