布隆过滤器实战【防止缓存击穿】

93a4a9f11445f88fc8791ebfc7361206.png

若有收获,请记得分享和转发哦

这是我们小群的聊天记录,鸡蛋回家后就一直感冒没好,之前都是我和他还有歪歪密切接触,一起吃饭啥的,所以我们都很慌。

今天他复查没问题,我们也如释重负,明天我也回杭了,大家下次大保健还是不要学鸡蛋不做保护措施,记得戴口罩。

为什么引入

我们的业务中经常会遇到穿库的问题,通常可以通过缓存解决。如果数据维度比较多,结果数据集合比较大时,缓存的效果就不明显了。因此为了解决穿库的问题,我们引入Bloom Filter。

适合的场景

  • 数据库防止穿库 Google Bigtable,Apache HBase和Apache Cassandra以及Postgresql 使用BloomFilter来减少不存在的行或列的磁盘查找。避免代价高昂的磁盘查找会大大提高数据库查询操作的性能。如同一开始的业务场景。如果数据量较大,不方便放在缓存中。需要对请求做拦截防止穿库。

  • 缓存宕机 缓存宕机的场景,使用布隆过滤器会造成一定程度的误判。原因是除了Bloom Filter 本身有误判率,宕机之前的缓存不一定能覆盖到所有DB中的数据,当宕机后用户请求了一个以前从未请求的数据,这个时候就会产生误判。当然,缓存宕机时使用布隆过滤器作为应急的方式,这种情况应该也是可以忍受的。

  • WEB拦截器 相同请求拦截防止被攻击。用户第一次请求,将请求参数放入BloomFilter中,当第二次请求时,先判断请求参数是否被BloomFilter命中。可以提高缓存命中率

  • 恶意地址检测 chrome 浏览器检查是否是恶意地址。首先针对本地BloomFilter检查任何URL,并且仅当BloomFilter返回肯定结果时才对所执行的URL进行全面检查(并且用户警告,如果它也返回肯定结果)。

  • 比特币加速 bitcoin 使用BloomFilter来加速钱包同步。

开源项目地址:https://github.com/luw2007/bloomfilter

我们先看看一般业务缓存流程: 10c713c6398007e295305a18168c5e03.png

a4eea49f88aeaae31f081d85c13e9b36.png

9c39bb9636e94b5cb9a16d69e15c091a.png

806c5f2c28bc77125902963a93b6cb7c.png

129a462322aa6e4ae977f596cb10d0ba.png

7abe6832cb2c4fd34bda58b384b88cb7.png

2a84d15605f0eae7e761bd4dd9b83341.png

c7f04b66bed24b74ada6e9399ecc8a5e.png

41306358387209981c6ce5159bd88913.png

77988840bd81f9d2d28e67ee0caacb97.png

6b9952d1a8e857e78ebbd03150ada43e.png

cc90ad7168c23efb22e224d65195eda8.png

9cdbba1bbc92389ca656c27cd7a8ecac.png

6594df52453e1d460e171f53971af4b6.png

63149251d63223733020cd76f614a772.png

bc8879e53d5d00e6d4a700a110549251.png

4ccd1aa4d900f80526e2f05246834668.png

caef945d3d3874c8504fcbddc1c26a00.png

011ed31e3ce6007fe9f38bcee35396a0.png

00c2103bbb9f2f96e6762b04237fe868.png

Rottenstreich,Kanizo和Keslassy(2012)引入了一种基于变量增量的新通用方法,该方法显着提高了计算布隆过滤器及其变体的误报概率,同时仍支持删除。与计数布隆过滤器不同,在每个元素插入时,散列计数器以散列变量增量而不是单位增量递增。要查询元素,需要考虑计数器的确切值,而不仅仅是它们的正面性。如果由计数器值表示的总和不能由查询元素的相应变量增量组成,则可以将否定答案返回给查询。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值