典型场景:
1、智能推荐,过滤用户已经看过的内容
2、爬虫系统,过滤已经爬过的网址
3、NoSQL 数据库领域,过滤大量不存在的row请求
4、邮箱系统,垃圾邮件过滤
默认的error_rate是 0.01
默认的initial_size是 100
这2个参数可以通过bf.reserve进行设置,用来控制误差率。
错误率越低,需要的空间越大。initial_size参数表示预计放入的元素数量,当实际数量超出这个数值时,误判率会上升。
实现原理:
每个布隆过滤器对应到 Redis 的数据结构里面就是一个大型的位数组和几个不一样的无偏 hash 函数。所谓无偏就是能够把元素的 hash 值算得比较均匀。
比如对于一个key,通过几个无偏hash函数进行运算,取模位图数组长度,得到了几个位图位置,然后全部设为1;
产生偏差原因:
多个不同的key,设置的位图位置有空能会有交叉,如果一个key的所有位图位置都被其他的key设置过了,布隆过滤器会认为这个key已经存在了;实际上这个key还没有设置过
也就是说:判断key是否存在,返回存在,实际上不一定存在,有误差
如果一个key所对应的位图位置种,有为0的存在,那这个位图肯定没有设置过
所以:判断key是否存在,返回不存在,那就一定不存在