布隆过滤器,小白能听懂话介绍一下

布隆过滤器其实就是一个“超级省空间、反应极快的智能门卫”。它的作用只有一个:帮你快速判断“某个东西到底在不在一堆数据里”

🏠 想象一面“全是开关的墙”

假设你有一个超级大的房间,墙上密密麻麻装了无数个电灯开关(这就是计算机里的“位数组”),一开始所有的开关都是关着(0)的状态。

现在,你想往里面存一个数据,比如“苹果”

  1. 你请来 3 个不同的“魔法计算器”(这就是“哈希函数”)。
  2. 这 3 个计算器分别算出:“苹果”对应第 3、第 5、第 8 号开关。
  3. 于是,你把这 3 个开关全部打开(变成 1)

接着,你又存了“橘子”,计算器算出它对应第 2、第 7、第 9 号开关,你把它们也全部打开。

🔍 怎么查东西在不在?

这时候,有人跑来问你:“香蕉在不在这里面?”
你同样用那 3 个“魔法计算器”去算“香蕉”,结果算出来是第 2、第 5、第 9 号开关。

你跑去墙边一看:

  • 第 2 号开关是亮的(橘子开的)。
  • 第 5 号开关是亮的(苹果开的)。
  • 第 9 号开关是亮的(橘子开的)。

重点来了!布隆过滤器只有两条铁律:

  1. 只要有一个开关是灭的,它绝对不在!
    比如你查“西瓜”,算出来对应第 10 号开关,你一看第 10 号是灭的。那你可以 100% 拍胸脯保证:“西瓜绝对没来过!”(因为只要来过,开关肯定会被打开)。
  2. 如果所有开关都是亮的,它“可能”在,但不一定!
    回到刚才的“香蕉”,虽然 2、5、9 号开关都亮着,但“香蕉”真的来过吗?其实并没有!这只是因为苹果和橘子“凑巧”把这几个开关给打开了。这就是布隆过滤器的“误判”(行话叫假阳性)。

💡 总结一下它的脾气

  • 优点(为什么爱用它): 极其省内存(不用把“苹果、橘子”这些具体内容存下来,只要记录开关状态),而且查询速度飞快,哪怕存几亿条数据,查一下也是毫秒级。
  • 缺点(需要注意): 它只能保证“绝对没有”,不能保证“绝对有”(存在误判);而且标准的布隆过滤器只能加不能删(因为你把第 5 号开关关了,可能会误伤到“苹果”)。

在 Redis 缓存穿透的场景里,布隆过滤器就是那个智能门卫
当黑客恶意查询一个根本不存在的 ID(比如 -1)时,请求还没到 Redis 和数据库,布隆过滤器一看开关全是灭的,直接就会把人拦下来:“这东西绝对没有,别去查数据库了!”从而完美保护了脆弱的数据库。

posted on 2026-05-13 14:27  anjun_xf  阅读(10)  评论(0)    收藏  举报

导航

TOP