《数学之美》第二十三章——布隆过滤器

1 布隆过滤器的原理

首先,布隆过滤器的作用主要是可以用来检索一个元素是否在一个集合中

书本上提到的例子是检验某个电子邮箱是否存储在黑名单中,这个黑名单就可以使用布隆过滤器来进行实现。基本原理如下图所示:
在这里插入图片描述

  1. 首先将存储地址的每个二进制位都归零。
  2. F1,F2,…,F8是8个随机数生成器,这些生成器可以根据电子邮箱地址生成8个随机数f1,f2,…,f8。
  3. 之后再将这8个随机数f1,f2,…,f8通过8个不同的哈希函数映射到存储空间的某个位上,将这个位置置为1,就完成了存储操作。
  4. 当需要进行查询的时候,根据新的邮箱,重复以上步骤,检查存储空间中相应的位是否置为1,如果有一个位没有置为1,就是查询失败。

布隆过滤器的优点在于查询十分快速,省空间。
布隆过滤器的缺点在于难以实现删除操作,并且会存在误识别。

2 延伸阅读:布隆过滤器的误识别问题

布隆过滤器会有可能存在误识别的问题,就是例如将不同的电子邮件,通过哈希函数,映射在相同的位上。当进行查询的是否,这封电子邮件本身不在黑名单中,但是发现这些位上全部置为1了,就会误识别位黑名单地址。
但是通过数学可以证明这个的概率是十分小的。

最后,个人觉得本书在布隆过滤器这个章节讲的原理不是特别清晰,所以去B站上找了下相关视频。发现一个原理讲解地更加清晰地视频,更好理解布隆过滤器,这里也分享出来,需要的小伙伴可以进行点击B站布隆过滤器视频

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redisson过滤器是基于Redis实现的Java分过滤器。它可以在多个JVM节点或其他进程中通过相同的KEY获取到过滤器过滤器的主要功能是判断某个元素是否存在于容器中,因此非常适合解决缓存穿透问题和检查数据是否重复的场景。使用Redisson过滤器时,需要单独开一个定时任务来初始化过滤器的数据,并在删除或更新数据时重新刷新过滤器。虽然使用过滤器可能稍显麻烦,但可以使用Redis的Set类型来替代。\[1\]\[2\] 在代码示例中,可以看到使用Redisson过滤器的示例代码。首先通过redisson.getBloomFilter方法获取过滤器实例,然后使用tryInit方法初始化过滤器的容量和误差率。接下来可以使用add方法向过滤器中添加元素,使用contains方法判断元素是否存在于过滤器中。\[2\]\[3\] 总结来说,Redisson过滤器是一种解决缓存穿透和检查数据重复的有效工具,但在使用时需要注意初始化和刷新过滤器的操作。 #### 引用[.reference_title] - *1* *2* *3* [从头开始学Redisson--------过滤器](https://blog.csdn.net/yanluandai1985/article/details/104848454)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值