布隆过滤器

107 阅读2分钟

1. 布隆过滤器简介

  • 布隆过滤器简介 布隆过滤器是一种空间利用率较高的概率型数据结构,用来测试一个元素是否在集合中。但是存在一定可能,导致结果误判。即元素不在集合中,查询结果却返回元素在集合中。

  • 布隆过滤器一些的性质

  1. 与哈希表不同,布隆过滤器是一个大小固定的过滤器,可以通过任意大的数字来描述集合大小
  2. 添加一个元素到集合中永远不会添加失败,但误报率会随着添加元素数量的增多逐渐上升,直到集合中所有位都设置位1
  3. 查询一个元素存在会产生误报的可能
  4. 不应该从集合中删除元素。例如一个元素对应k的hash函数,当我们尝试删除,可能导致将hash值相同的元素也一并删除。
  • 布隆过滤器的工作方式
  1. 一个空的布隆过滤器是一个由m个二进制位构成的数组。
    布隆过滤器结构
  2. 我们需要k个hash函数来计算输入的hash值。当我们向过滤器中添加一个元素事,k个hash函数计算出的索引值 h1(x), h2(x),… hk(x)被设置位1。例如将geeks加入到过滤器中,我们用到3个hash函数,过滤器的长度为10,初始值被设置为0。

2. 使用Redis实现布隆过滤器

  • Guava已经实现BoomFilter相关算法,包括通过预计插入元素个数、bit空间大小来、预计失误率来计算hash函数个数。
  • 使用Redis setbit 命令来设置对应的值是否命中,Redis还可以持久化

3. 布隆过滤器来防止缓存穿透(击穿)