美文网首页
redis整合redis布隆过滤器

redis整合redis布隆过滤器

作者: 家hao | 来源:发表于2020-09-14 15:12 被阅读0次

    1、布隆过滤器是什么,一定要用吗?

    (1)黑客流量攻击:故意访问不存在的数据,导致程序不断访问DB数据库的数据
    (2)黑客安全阻截:当黑客访问不存在的缓存时迅速返回避免缓存及DB挂掉
    (3)思考:如果让你实现这个功能你会怎么做? key:10000 10001 10002 10003 大集合,key是否在集合里面

    • 分析java常用数据结构复习 set map key,value list 有序get[0]、get[1];
    • list.contain (key)遍历数据,进行equals()比较,性能小
    • set.contain(key) hashcode比较,性能较高,64位 1G
    • map.get(key) hashcode比较,性能还行

    2、概念:

    布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系
    列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时
    间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。

    • 优点:
      相比于其它的数据结构,布隆过滤器在空间和时间方面都有巨大的优势。布隆过滤器存储空间和插入/
      查询时间都是常数({\displaystyle O(k)} )。另外,散列函数相互之间没有关系,方便由硬件并
      行实现。布隆过滤器不需要存储元素本身,在某些对保密要求非常严格的场合有优势
    • 缺点
      但是布隆过滤器的缺点和优点一样明显。误算率是其中之一。随着存入的元素数量增加,误算率随之增
      加。但是如果元素数量太少,则使用散列表足矣

    3、布隆过滤器的其他使用场景?

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

    4、给Redis安装Bloom Filter

    git clone git://github.com/RedisLabsModules/rebloom  //在一个文件录下下载
    $ cd rebloom
    $ make
    
    image.png
    安装完成后会生成一个“redisbloom.so”

    5|将Rebloom加载到Redis中,在redis.conf里面添加

    [图片上传中...(image.png-b8e233-1600066865250-0)]

    loadmodule /usr/local/rebloom/rebloom.so //对应自己的安装的Bloom Filter的路径
    
    image.png

    6、命令测试

    布隆过滤器有二个基本指令,bf.add 添加元素,bf.exists 查询元素是否存在,它的用法和 set 集合的 sadd 和 sismember 差不多。注意 bf.add 只能一次添加一个元素,如果想要一次添加多个,就需要用到 bf.madd 指令。同样如果需要一次查询多个元素是否存在,就需要用到 bf.mexists 指令。
    (1)BF.ADD bloom redis
    (2)BF.EXISTS bloom redis
    (3)BF.EXISTS bloom nonxist


    image.png

    相关文章

      网友评论

          本文标题:redis整合redis布隆过滤器

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