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
安装完成后会生成一个“redisbloom.so”
5|将Rebloom加载到Redis中,在redis.conf里面添加
[图片上传中...(image.png-b8e233-1600066865250-0)]
loadmodule /usr/local/rebloom/rebloom.so //对应自己的安装的Bloom Filter的路径
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