最近在看redis,看到了布隆过滤器,查了几篇文章之后就总结一下自己的学习,本文只是对基本原理做一个总结,代码分析在下一章《布隆过滤器的代码学习》
1、布隆过滤器概要
1、布隆过滤器简介
布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。(摘自百度百科)
这是百度百科对于布隆过滤器的一个解释,在开了天眼分析过之后,我来通俗化一下这个解释。
实际上布隆过滤器由两部分构成:
1、 一个二进制向量,(可以把它理解成一个数组,里面存放的是1,0,0,1,1......这样的二进制数)。默认存储的是0。主要用于判断一个元素是否在一个集合中,0代表不存在某个数据,1代表存在某个数据。
2、 一系列的哈希函数(随机映射函数)。
2、基本工作原理
主要用来对存储的数据做hash计算,得到对应的散列值,这个散列值就是这个值对应的在数组的位置下标,每一个hash函数做一次散列计算,得到这个要存储的值的一系列下标位置,然后把对应位置的数据里面的数据修改为1,表示该数据存储进入布隆过滤器。查询数据的时候只需要对数据做对应的散列计算,然后比对下标中的值,如果值全部为1则表示这个数据是存在布隆过滤器的,只要有一个为0,就表示布隆过滤器中没有该数据。这即是布隆过滤器的工作原理。
3、主要用途<