布隆过滤器原理

1 场景

  1. 解决新闻推荐过的不再推荐(类似抖音刷过的往下滑动不再刷到)
  2. 避免缓存穿透问题,用于判断数据是否存在 ----登录接口大家都能访问(用没有的手机号或账号访问)

2原理

 现在我们模拟一直去访问接口。数据库和缓存都没有的数据,例如数据访问id为-1的数据,大量访问导致数据库压力过大。

场景:如何知道我们缓存中没有这个"你好呀"这个字符串呢?

存入过程:

 1:我们要将 "你好呀"存入到布隆过滤器中去

 2:布隆过滤器会将 "你好呀" 进行hash运算, 运算次数不一定几次,根据你设置的命中率决定的,你想要命中率高,就会多次进行hash运算,因为hash算法是有hash冲突的。

     hash冲突:hash(你好呀)=5 , hash(你好)=5   这就是hash冲突。

3:第一次运算值=4  会去下标为4的位置,将0改为1.

     第二次运算值=5  会去下标为5的位置,将0改为1.

     第三次运算值=7  会去下标7的位置,将0改为1.

如何知道  "你好呀" 是有的呢?

1:会将 "你好呀" 进行三次hash运算, 计算结果为  4,5,7

2:我们就会获取 4,5,7这三个小标的值是不是都是1,

3:全部都是,布隆过滤器则认为有该值,如果有一个是0,都认为没有该值

那有没有可能 有一个值 的三次hash算法值和 "你好呀" 的值一模一样啊?

是有的。

所以结论就是: 布隆过滤器认为有的数据不一定有,但是它认为没有的,一定没有。

那当 "你好呀"这个数据已经从缓存中删除了,布隆过滤器你能删除吗?

布隆过滤器不能删除数据

原因:

优缺点:

优点:

     1:它是由二进制组成,占的空间特别小。

     2:根据下标去查询,所以速度特别快。

缺点:

     1:它是有误判的,明明这个数据不存在的?但是却认为存在。hash冲突原理

     2:数据删除不了,

            如果用本地内存实现,每半个月重启一次服务器,数据丢失,redis实现,重复数据会越来越多。时间越久,结果越不准确。因为数据只增不减

       本地内存方式 谷歌的比较好使,redis方式应该需要安装布隆软件,并且需要和redis配置。

先看这个 布谷鸟 有空自己写

Redis--布谷鸟过滤器--使用/原理/实例_IT利刃出鞘的博客-CSDN博客_布谷鸟过滤器

官网也说了有误删的情况

 https://mp.weixin.qq.com/s/ZUMS_9AtshRjzS4Rw1UOyQ

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值