布隆过滤器(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

 

posted @ 2020-01-11 12:01  牧云文仔  阅读(131)  评论(0编辑  收藏  举报