布隆过滤器

一、作用

判断一个元素是否存在与布隆过滤器
	判断不存在:一定不存在
	判断存在: 可能不存在(具有一定的误判,误判原因见添加元素和查询元素原理)



布隆过滤器可以解决缓存穿透:
   缓存穿透的定义:查询一个不存在的Key,请求直达db,db也没有数据。一直请求,就一直访问db
   布隆过滤器如何解决缓存穿透:在redis前面加上一层布隆过滤器
     	即查询redis前先查询布隆过滤器,如果不存在,将请求直接在redis前面拦截,不会请求到redis和db
	    如果存在,再放行查询redis和mysql

二、数据结构

布隆过滤器是由一个大型二进制位数组  +  多个无偏hash函数

在这里插入图片描述

三、布隆过滤器添加元素和查询元素原理

添加元素:
  见上图,比如添加元素 userId1 到过滤器
   1、通过k个无偏hash函数计算得到元素 userId1 的k个hash值
   2、得到的k个hash值依次取模数组长度,得到数组索引
   3、将计算得到的数组索引下标位置数据修改为1
  
 查询元素:
    查询元素Liziba是否在过滤器
    1、通过k个无偏hash函数计算得到元素 userId1 的k个hash值
    2、得到的k个hash值依次取模数组长度,得到数组索引
    3、判断索引处的值是否全部为1,但凡有一个0, 则该元素必定不存在与布隆过滤器
          如果都为1,可能存在也可能不存在(可能不存在的原因是尽管数组下标都为1,但有可能是被其他元素计算到标记为1(被其他元素污染)

四、优缺点

有一定的误判(查询时数组下标都为1,可能是其他元素标记的)
不能删除元素
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飘然生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值