布隆过滤器
了解
- 1970年,由Bloom 提出的
- 由二进向量(位数组)与 随机映射函数组成映射关系
- BitSet 作为位容器(位数组),位值为 0 或者 1
- 随机映射函数(HashFunction),目的生成一个对应的数值,然后存入到 BitSet中。
- 优点:
- 数组容器占用空间小。存储100W个数据,占 122 KB(100W*1bit/8/1024)
- 如果存储过数据,容器必定有痕迹
- 缺点:
- 容器有痕迹的,不一定存储过数据
- 容器中只能添加数据,不能删除数据。删除元素导致位值的变化,会提高容器的错误率
- 数据量越大,错误率会越高。所以一般 位容器的初始位数会很大
注 : 1 M = 1024 KB = 1024 * 1024 B(byte) = 1024 * 1024 * 8 bit
原理
添加对象
被添加的对象,通过 HashFunction 会生产一个或多个对应的数值,并存储到 BitSet 容器中。BitSet 中位值会由 0->1 ,多个对象存储时,位值也只会存储到 1。
判断对象
判断的过程中,实际是看对象通过 HashFunction 所生产的一个或多个对应的数值,在 BitSet 中的位值是否都为1。
图中,对象4 对应的所有位值里面,存在一个值为 0,则 对象4 一定没存储过。
实现
应用场景
Bloom Filter 在使用场景上分为两种,一种是单体架构,一个是分布式架构。
单体架构:Gava,redis
分布式架构: redis bloom(需要自行安装到 redis 中)
缓存击穿
使用布隆过滤器,将全部的有效数据都走一遍布隆过滤器,这样新来请求时,先走一遍请求的元素是否能通过布隆过滤器的验证,若未通过就直接放弃请求,若通过再执行查询
去重
用户浏览记录存入数据库时,会在Filter上通过key的hash算法存储判断其是否存在,类似于数据存在数据库中,判断该数据是否存在的信息即元数据存放在BloomFilter中,避免了每次判断数据是否存在都要去数据库exist一遍;这样推送新闻时通过布隆过滤器判断,推送内容是否已经存在,如果存在则不推送,如果不存在则推送;
__EOF__

本文作者:之士咖啡
本文链接:https://www.cnblogs.com/zz-1q/p/16263667.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/zz-1q/p/16263667.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)