前言:搜索缓存穿透问题,常常看到解决方案中提到 布隆过滤器。那么这个东西是啥意思?干什么用的?怎么用?原理是什么?
请看本文的极简入门教程。(严格说,本文是笔者在学习时,提取出的纯干货,力求一看就懂)
1、应用场景
解决缓存穿透问题,业界通用2种方案
缓存空对象 or 布隆过滤器
缓存空对象:实现简单,不会出错(说的是与布隆过滤器相比)
布隆过滤器:实现复杂,存在错误率
2、布隆过滤器 的 作用
把你要缓存的所有key全都塞进布隆过滤器中。
在查询缓存的时候,先拿着key去布隆过滤器中查一下,看是否存在,不存在就可以直接返回,避免了缓存穿透。
你可以简单的理解为,布隆过滤器的作用就相当于map数据结构中的containsKey()这个API。
3、布隆过滤器 提供了哪些功能?
2个功能:分别对应着 insert 和 containsKey的作用
4、关于布隆过滤器需要知道的点
1、布隆过滤器底层使用的是bit数组。请注意:我说的是使用了bit数组,可没说key都保存在bit数组里。
2、布隆过滤器本身并不存储key,它的作用只是帮助你判断key是否存在。
3、布隆过滤器存在错误率,即containsKey(key)返回结果true,实际上key可能不存在。
4、布隆过滤器不能delete / g