布隆过滤器(Bloom Filter)
一、概念
1. 布隆过滤器是一个数据结构:bit数组+随机映射函数
2. 作用:高效判断某个元素是否在给定的集合中
3. 缺点:有一定的错误识别率,随着数据量越大,错误识别率越大;并且不容易删除
二、原理
1. 加入元素:
a. 使用布隆过滤器中的哈希函数,计算元素的哈希值,可能有多个哈希函数,对应多个哈希值
b. 根据所有哈希值,把bit数组中对应下标的值设置为1;如果设置时发现已经全部为1,表示元素重复
2. 判断元素:
a. 计算哈希值
b. 判断是否所有对应的下标都为1,都为1存在布隆过滤器;有一个不为1表示不存在布隆过滤器中
3. 错误率:不同的元素,通过哈希函数计算出来的位置相同
4. 判断元素存在,小概率会误判;判断元素不存在,一定不会误判
三、使用场景
1. 判断给定的数据是否存在大数据中
2. 防止缓存穿透,判断请求的数据是否有效,避免绕过缓存直接访问数据库
3. 垃圾邮件过滤
4. 黑名单功能
5. 爬虫去重url
四、Redis中的布隆过滤器
1. 可以根据原理自己实现布隆过滤器
2. 单机使用Guava的布隆过滤器
3. 分布式使用Redis中的布隆过滤器
参考:
https://mp.weixin.qq.com/s/_qsHjDemXUNObB0h0XHCkQ