今天看到缓存穿透的解决方案有一个使用布隆过滤器方式,所以就了解了一下,依然走我们的三连问
1、布隆过滤器是什么
一个很长的二进制的向量和随机函数
2、为什么用它
节约性能,我现在有一个很大很大数据,然后判断某个值是否存在。 不考虑内存的情况,可以使用hashMap方式,但是我们现在数据量很大,使用布隆过滤器能节约内存开销。
3、原理实现
可以判断一个值肯定不存在,但是无法判断某个值一定存在,只是可能存在,存在一定的误差率
解释:一定不存在:我有一个长度为8的数组且默认值都是0,第一次一个数字1000,通过两次次hash算法得到了第1位和第3位的值修改为1,那么第二次我再来一个数字1000,通过相同的hash算法得到了第一位和第三位还是1,说明1000已经存在了
第三次我写入一个2000的值进来,修改了下标4和7为1,那么第四次我写入3000进来,结果发现下标5为0,说明该3000肯定不存在
可能存在:如果数组长度到了一定的长度,那么有可能存在某些值对应的下标均是1,存在重复,这也是布隆过滤器的缺点。删除也存在缺点,比如我把某个值删除了,那么可能会影响其他的值