目录
2.如何处理布隆过滤器的误判率?在实际应用中有哪些补救措施?
3.如何在插入超过预期数量的元素时处理布隆过滤器的误判率增加问题?
5.Google的Guava库提供了高效的布隆过滤器实现,如果使用其现成的内容,上面代码该如何实现?
6.Guava的BloomFilter是如何控制误判率和内存使用的?
7.Guava的BloomFilter是否支持扩展,即动态增加元素后仍保持较低的误判率?
8.Guava的BloomFilter是线程安全的吗?如果不是,如何确保线程安全?给出实现?
方法1:显式锁---使用显式锁可以确保在对BloomFilter的每次访问(读或写)时,都只有一个线程能够执行操作。
方法2:使用并发集合---在这种方法中,我们将多个布隆过滤器分片存储在一个并发集合(如ConcurrentHashMap)中,通过将元素散列到不同的布隆过滤器分片来减少争用。
方法3:使用ReadWriteLock---使用ReadWriteLock可以在读操作不需要互斥的情况下提高并发性,只有在写操作时才进行锁定。
干货分享,感谢您的阅读!
布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。
一、快速了解布隆过滤器
缓存穿透是每次查询都要经过缓存,查询未命中回溯到数据库中,如果我们用一种存储结构存储所有数据,在查询缓存之前提前过滤要查询的数据是否一定不存在,如果存在就不用再去查缓存了,也就避免了缓存穿透的问题,当然这对过滤器的存储结构要求就比较高了。
(一)布隆过滤器
如果不考虑内存容量问题,hashmap是最简单的一种过滤器,把所有数据存在map中,通过get(key)是否存在进行过滤,当然我们这里用hashmap是不现实的,因为不满足内存容量要求,