布隆过滤器

布隆过滤器是一种基于 Hash 的高效查找结构,能够快速回答“某个元素是否在一个集合内”的问题,布隆过滤器因为其高效性大量应用于安全和隐私保护领域,例如信息检索、注册等。 布隆过滤器采用了多个 Hash 函数来提高空间利用率,对于一个给定输入来说,通过多个Hash 函数计算出多个地址,并分别在位串的这些地址上标记为 1。当需要进行查找时,则进行同样的哈希计算,并查看对应元素,若是都为 1,则说明较大概率是存在该输入的。布隆过滤器相对于单个 Hash 算法的查找,大大提高了空间利用率,可以使用较少的空间来表示较大集合的存在关系。 具体地,假设存在 k 个哈希函数{h1,h2,…,hk}和一组元素{x1,x2,…,xk},通过这 k 个 Hash 函数将这一组元素映射到布隆过滤器中,并将对应位置设为 1,具体操作如图 2.4 所示。

元素的添加:如图 2.4 所示,将元素组中的元素 x1 经过 k 次哈希得到 k 个哈希值{h1(x1),h2(x1),…,hk(x1)},然后根据这些值找到对应位置,并将相应位置设为 1  。 元素的查询:经过上一步骤,x1 已经被添加到布隆过滤器中,接下来要查询 x1 是否已经存在于布隆过滤器中。首先,按照相同的方式计算该元素的 k 个哈希值,并将其表示为{h1(x1),h2(x1),…,hk(x1)},随后找到相应位置并检查该位置是否已经全部置 1。如果其中有 0 存在,则说明该元素不曾被添加到布隆过滤器中,否则,可以证明 x1 已被存储在布隆过滤器中。

图一

图二

上图一为增加,查询过程,比方说增加你好,或者查询你好,图二为删除查询过程,删除你好,缺导致删除hello。
缺点:没有更新  优点:二进制数据存储比较小,查询比较块,查询复杂度是O(K),K为哈希函数的个数
 

哈希函数越多,误差率越小,占用空间越大,误差率越小

解决redis 缓存穿透

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值