为什么需要布隆过滤器想象一下遇到下面的场景你会如何处理:手机号是否重复注册用户是否参与过某秒杀活动伪造请求大量id查询不存在的记录,此时缓存未命中,如何避免缓存穿透针对以上问题常规做法是:查询数据库,数据库硬扛,如果压力并不大可以使用此方法,保持简单即可。改进做法:用list/set/tree维护一个元素集合,判断元素是否在集合内,时间复杂度或空间复杂度会比较高。如果是微服务的话可以用redis中的list/set数据结构,数据规模非常大此方案的内存容量要求可能会非常高。这些场景有个共同点,可以将问题抽象为:如何高效判断一个元素不在集合中?那么有没有一种更好方案能达到时间复杂度和空间复杂双优呢
为什么需要布隆过滤器想象一下遇到下面的场景你会如何处理:手机号是否重复注册用户是否参与过某秒杀活动伪造请求大量id查询不存在的记录,此时缓存未命中,如何避免缓存穿透针对以上问题常规做法是:查询数据库,数据库硬扛,如果压力并不大可以使用此方法,保持简单即可。改进做法:用list/set/tree维护一个元素集合,判断元素是否在集合内,时间复杂度或空间复杂度会比较高。如果是微服务的话可以用redis中的list/set数据结构,数据规模非常大此方案的内存容量要求可能会非常高。这些场景有个共同点,可以将问题抽象为:如何高效判断一个元素不在集合中?那么有没有一种更好方案能达到时间复杂度和空间复杂双优呢
布隆过滤器它是一种独特的数据结构,用以判断:一个数据可能存在或一定不存在算法思路:开一个指定长度的数组,将所有的元素值设为0添加元素时,执行hash,得到多个位置下标,将数组对应位置设置为1检查元素是否存在时,执行hash,得到多个位置下标,查看数组中对应下标的值:1>如果值均为1,则可能存在2>如果值有一个是0,则一定不存在综上所述,布隆过滤器可以用来判断一定不存在的值,且效率较高,但是随着插入的数据不断增加,判断错误的概率也逐渐变大。有一个极端情况就是全部位置都为1,这个时候就什么都判断不出来了。示例代码主要使用pybloom_livegithub项目主页:https://github.c
布隆过滤器它是一种独特的数据结构,用以判断:一个数据可能存在或一定不存在算法思路:开一个指定长度的数组,将所有的元素值设为0添加元素时,执行hash,得到多个位置下标,将数组对应位置设置为1检查元素是否存在时,执行hash,得到多个位置下标,查看数组中对应下标的值:1>如果值均为1,则可能存在2>如果值有一个是0,则一定不存在综上所述,布隆过滤器可以用来判断一定不存在的值,且效率较高,但是随着插入的数据不断增加,判断错误的概率也逐渐变大。有一个极端情况就是全部位置都为1,这个时候就什么都判断不出来了。示例代码主要使用pybloom_livegithub项目主页:https://github.c
本文已收录于专栏❤️《Redis之大厂必备技能包》❤️欢迎各位关注、三连博主的文章及专栏,全套Redis学习资料,大厂必备技能! 目录1、什么是布隆过滤器2、布隆过滤器的使用场景3、布隆过滤器的原理3.1数据结构3.2空间计算3.3增加元素3.4查询元素3.5修改元素3.6删除元素4、Redis集成布隆过滤器4.1版本要求4.2安装&编译4.3Redis集成5、Redis中布隆过滤器指令使用5.1bf.add5.2bf.madd5.3bf.exists5.3bf.mexists6、Java本地内存使用布隆过滤器6.1引入pom依赖6.2编写测试代码6.3测试结果6.4参数说明6.5fpp&ex
本文已收录于专栏❤️《Redis之大厂必备技能包》❤️欢迎各位关注、三连博主的文章及专栏,全套Redis学习资料,大厂必备技能! 目录1、什么是布隆过滤器2、布隆过滤器的使用场景3、布隆过滤器的原理3.1数据结构3.2空间计算3.3增加元素3.4查询元素3.5修改元素3.6删除元素4、Redis集成布隆过滤器4.1版本要求4.2安装&编译4.3Redis集成5、Redis中布隆过滤器指令使用5.1bf.add5.2bf.madd5.3bf.exists5.3bf.mexists6、Java本地内存使用布隆过滤器6.1引入pom依赖6.2编写测试代码6.3测试结果6.4参数说明6.5fpp&ex
目录一、布隆过滤器提出二、布隆过滤器概念三、布隆过滤器实现3.1 布隆过滤器的插入3.2布隆过滤器的查找3.3 布隆过滤器的删除3.4完整代码四、布隆过滤器优点五、布隆过滤器缺陷一、布隆过滤器提出 在注册账号设置昵称的时候,有些软件要求每个用户昵称要保持唯一性,系统必须检测你输入的昵称是否被使用过,这本质就是一个K的模型,只需要判断这个昵称存在还是不存在用哈希表存储用户昵称,缺点:浪费空间用位图存储用户昵称,缺点:位图一般只能处理整形,如果内容编号是字符串,就无法处理了将哈希与位图结合,即布隆过滤器为什么说位图处理不了字符串?? 位图虽然能够大大节省内存空间,但由于字符串的
目录一、布隆过滤器提出二、布隆过滤器概念三、布隆过滤器实现3.1 布隆过滤器的插入3.2布隆过滤器的查找3.3 布隆过滤器的删除3.4完整代码四、布隆过滤器优点五、布隆过滤器缺陷一、布隆过滤器提出 在注册账号设置昵称的时候,有些软件要求每个用户昵称要保持唯一性,系统必须检测你输入的昵称是否被使用过,这本质就是一个K的模型,只需要判断这个昵称存在还是不存在用哈希表存储用户昵称,缺点:浪费空间用位图存储用户昵称,缺点:位图一般只能处理整形,如果内容编号是字符串,就无法处理了将哈希与位图结合,即布隆过滤器为什么说位图处理不了字符串?? 位图虽然能够大大节省内存空间,但由于字符串的
布隆过滤器原理介绍 【1】概念说明 1)布隆过滤器(BloomFilter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。 【2】设计思想 1)BF是由一个长度为m比特的位数组(bitarray)与k个哈希函数(hashfunction)组成的数据结构。位数组均初始化为0,所有哈希函数都可以分别把输入数据尽量均匀地散列。 2)当要插入一个元素时,将其数据分别输入k个哈希函数,产生k个哈希值。以哈希值作为位数组中
布隆过滤器原理介绍 【1】概念说明 1)布隆过滤器(BloomFilter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。 【2】设计思想 1)BF是由一个长度为m比特的位数组(bitarray)与k个哈希函数(hashfunction)组成的数据结构。位数组均初始化为0,所有哈希函数都可以分别把输入数据尽量均匀地散列。 2)当要插入一个元素时,将其数据分别输入k个哈希函数,产生k个哈希值。以哈希值作为位数组中