布隆过滤器

参考文章

布隆过滤器redis缓存

https://www.cnblogs.com/zhanggguoqi/p/10571225.html

布隆过滤器(bloom filter)介绍以及php和redis实现布隆过滤器实现方法

http://imhuchao.com/1271.html

借助Redis Bitmap实现简单的布隆过滤器

https://www.jianshu.com/p/c2defe549b40

bloom filter 布隆过滤器介绍

作用:判断一个元素是否在集合中。

异点:和java中的collection中的contain有很大的不同,

   java中一般都是会,先把元素存储起来,但是布隆过滤器不用存储元素

原理:每个元素,通过k中不同的hash算法,计算出k个不同的index,把这个index存储位置都设置为1,

  (二进制序列的index)

   如果一个一个元素计算出所有index上都为1,则存在;一遇到index为0的,元素就不存在。

感觉:有点好玩,有点不可思议,有点不相信。

特点:判断不存在的,肯定不存在;判断存在的,可能是误判。

  (为什么会误判呢?参考文章中说,二进制序列中1越来越多的时候,就会把不存在的元素,判断成存在)

   (那么,我觉得是不是可以,定时重新更新序列呢!从而减少误判情况)

<借助Redis Bitmap实现简单的布隆过滤器>

Guava中BloomFilterStrategies实现了布隆过滤器

上面那篇redis实现布隆过滤器的思路:

  1. 创建一个布隆过滤器,重要参数,hash函数个数,redis中bitmap位图长度
  2. 最重要的实现getBitIndices(element),就是根据传入的元素,返回hash后的,二进制序列为1的位置的数组
  3. 然后就是应用阶段。保存元素位图信息,和,判断元素是否存在
    1. 保存元素信息:getBitIndices返回的index集合,都设置为true
    2. 判断元素存在:getBitIndices返回的index集合,判断是否存在false,有false则不存在;否则,存在。
原文地址:https://www.cnblogs.com/windy13/p/12638177.html