布隆过滤器
参考https://juejin.im/post/5de1e37c5188256e8e43adfc
什么是布隆过滤器?
布隆过滤器本质上是一个很长的位数组和一系列哈希函数。位数组元素一开始全是0。往布隆过滤器里放元素时,假如有n个哈希函数,则先用这n个哈希函数处理元素,得到n个数字,然后把数组对应索引处设置为1,比如说1、3、5位置设置成1。元素量大时,难免会发生哈希碰撞,这样后面的1就会覆盖前面的1。布隆过滤器的特性是能够判定某个元素不存在,但不能判定某个元素存在。一个元素,通过哈希函数算出几个数,这些对应索引位置处只要有一个是0,就表示不存在,因为假如存在的话,那些对应索引位置必然都是1。另外,即使那些对应索引位置都是1,也不能判定该元素存在,因为这些索引位置的1可能是存放其他元素时设置的。
布隆过滤器的应用场景:
在很大量很大量的数据集里判定某一个数据不存在。如果接受一定错误率的话,还可以用来判定某一个数据存在。在其他常见方法,比如说放到Set中用contains判断、存到数据库中查询、存到es中查询,这些方法因为数据量太大而不得不放弃时,就可以考虑用布隆过滤器了。
布隆过滤器为什么能支持大量的数据呢?因为它存放的不是这些数据集本身,而是这些根据这些数据集去设置位数组的值,而位数组占用内存空间很小,且位数组的大小在创建布隆过滤器时就指定了,不管存再多数据,都不会再变了。
可以用redis实现布隆过滤器。如果redis版本在8.0以下,需要在redis服务端上安装一个叫做RedisBloom的插件。从redis8.0开始,redis服务端自带了布隆过滤器。见https://redis.io/docs/latest/commands/?name=bf
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】