【IT老齐008】布隆过滤器

发布时间 2023-04-24 17:13:05作者: Faetbwac

【IT老齐008】布隆过滤器

缓存穿透

绕过缓存服务器进入数据库查询

场景举例:正常redis有1000条缓存数据,忽然遭到爬虫/流量攻击攻击,大量不存在的于redis的数据批量查询,由于redis不存在这些数据,会到数据库进行查询。由于数据库对于瞬时高并发访问的承载能力弱,所以可能对数据库造成影响,甚至崩溃。

缓存穿透攻击:指恶意用户在短时间内大量查询不存在的数据,导致大量请求在被送达数据库进行查询,当请求数量超过数据库负载上限时,使系统响应出现高延迟甚至瘫痪的行为。

布隆过滤器

布隆过滤器:由一个很长的二进制向量和一系列随机映射函数组成,可以用于检索一个元素是否在一个集合中。

实现原理

Hash (散列函数):是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。
由于这种转换,可能存在 不同的输入可能会散列成相同的输出。
Hash算法可以将一个数据转换为一个标志,这个标志,就是视频说的hash,hash后若不存在,就由0变为1。存在,不变。

Hash面临的问题就是冲突。假设 Hash 函数是良好的,如果我们的位阵列长度为 m 个点,那么如果我们想将冲突率降低到例如 1%, 这个散列表就只能容纳 m/100 个元素。显然这就不叫空间有效了(Space-efficient)。
解决方法也简单,就是使用多个 Hash,如果它们有一个说元素不在集合中,那肯定就不在。如果它们都说在,虽然也有一定可能性它们在说谎,不过直觉上判断这种事情的概率是比较低的。

特点

  • 一定的误识别率
  • 删除困难

使用

1682325893534

布隆过滤器初始化后数据被删除

布隆过滤器某一位二进制可能被多个编号hash引用(看hash的特点:不同的输入可能会散列成相同的输出),不能直接处理删除布隆过滤器的数据。
解决方案:

  • 定时异步重建布隆过滤器
  • 计数BloomFilter

注意:如果不处理,布隆过滤器的误判率会增高