2021-08-25

布隆过滤器小记

一、缓存技术
在了解布隆过滤器之前先回忆一下数据缓存,java项目中我们用到过ehcache基于jvm内存的缓存框架,也使用到过第三方的服务如redis,memcached等内存数据库。

二 在使用缓存技术方面要面对的几种问题:

  1. 缓存穿透:访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉。
  2. 缓存击穿: 一个存在的key,在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力骤增。
  3. 缓存雪崩: 大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。

三 需要判断大量数量是否存在
当我们要判断某个商品的id是否存在的时候需要,可以去查询数据库但是这种查询方式会给数据库带来巨大的压力,在高并发的情况下可能到时数据库压力过大而宕机,另一种方法是将所有的产品id读取到缓存中去,可以减小数据库的压力和提升比对的速度,但是缺点就是会占用大量的内存,例如 java 中一个 int类型占用4个字节的内存,10000个商品id的话 占用10000*4/1024=39KB (这里做个计算用来和下面说到的布隆过滤器占用的内存大小进行比对)

四 布隆过滤器是什么
布隆过滤器是一种占用空间很小的数据结构,它由一个很长的二进制向量和一组Hash映射函数组成,它用于检索一个元素是否在一个集合中,空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。
布隆过滤器原理是?
假设我们有个集合A,A中有n个元素。利用k个哈希散列函数,将A中的每个元素映射到一个长度为a位的数组B中的不同位置上,这些位置上的二进制数均设置为1。如果待检查的元素,经过这k个哈希散列函数的映射后,发现其k个位置上的二进制数全部为1,这个元素很可能属于集合A,反之,一定不属于集合A。
布隆过滤器默认的误差率为0.003而且布隆过滤器会根据期望的填充数据量计算去填充的字节数组的长度。
布隆过滤器的执行原理 请参考 Counting Bloom Filter 的原理和实现

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值