• 布隆过滤器


    关于缓存穿透的解决方案,这篇文章讲的很透彻,拿来分享下:

    详细内容参考博主链接:

    https://www.cnblogs.com/rjzheng/p/8908073.html

    布隆过滤器

    1、原理

    布隆过滤器的巨大用处就是,能够迅速判断一个元素是否在一个集合中。因此他有如下三个使用场景:

    1. 网页爬虫对URL的去重,避免爬取相同的URL地址
    2. 反垃圾邮件,从数十亿个垃圾邮件列表中判断某邮箱是否垃圾邮箱(同理,垃圾短信)
    3. 缓存击穿,将已存在的缓存放到布隆过滤器中,当黑客访问不存在的缓存时迅速返回避免缓存及DB挂掉。

    OK,接下来我们来谈谈布隆过滤器的原理
    其内部维护一个全为0的bit数组,需要说明的是,布隆过滤器有一个误判率的概念,误判率越低,则数组越长,所占空间越大。误判率越高则数组越小,所占的空间越小。

    假设,根据误判率,我们生成一个10位的bit数组,以及2个hash函数(f1,f2f1,f2),如下图所示(生成的数组的位数和hash函数的数量,我们不用去关心是如何生成的,有数学论文进行过专业的证明)。

    总结:一个数组,两个hash函数。


    image

    假设输入集合为(N1,N2N1,N2),经过计算f1(N1)f1(N1)得到的数值得为2,f2(N1)f2(N1)得到的数值为5,则将数组下标为2和下表为5的位置置为1,如下图所示
    image

    同理,经过计算f1(N2)f1(N2)得到的数值得为3,f2(N2)f2(N2)得到的数值为6,则将数组下标为3和下表为6的位置置为1,如下图所示
    image

    这个时候,我们有第三个数N3N3,我们判断N3N3在不在集合(N1,N2N1,N2)中,就进行f1(N3)f2(N3)f1(N3),f2(N3)的计算

    结论:

    1. 若值恰巧都位于上图的红色位置中,我们则认为,N3N3在集合(N1,N2N1,N2)中
    2. 若值有一个不位于上图的红色位置中,我们则认为,N3N3不在集合(N1,N2N1,N2)中

    以上就是布隆过滤器的计算原理

  • 相关阅读:
    关于【无法将*.dll复制到指定目录】错误的解决
    给一个容器控件内(如:div,form)文本框批量添加验证事件
    js操作dom(2)
    关于.net中修饰符的一点总结
    js操作dom(3)
    关于【源文件与模块生成时的文件不同】问题的解决
    pb中用OLE Control 报错解决方法 (转载)
    Web前端技术(摘抄)
    Uva1420 Priest John's Busiest Day
    UVa1445 Cubist Artwork
  • 原文地址:https://www.cnblogs.com/fengli9998/p/8939658.html
Copyright © 2020-2023  润新知