| 
                          
- <dependency> 
 -     <groupId>com.google.guava</groupId> 
 -     <artifactId>guava</artifactId> 
 -     <version>28.1-jre</version> 
 - </dependency> 
 
  
Guava 中的布隆过滤器实现的非常复杂,关于细节我们就不去探究了,我们就来看看 Guava 中布隆过滤器的构造函数吧,Guava  中并没有提供构造函数,而且提供了 create 方法来构造布隆过滤器: 
- public static <T> BloomFilter<T> create( 
 -     Funnel<? super T> funnel, int expectedInsertions, double fpp) { 
 -   return create(funnel, (long) expectedInsertions, fpp); 
 - } 
 
  
funnel:你要过滤数据的类型 
expectedInsertions:你要存放的数据量 
fpp:误判率 
你只需要传入这三个参数你就可以使用 Guava 包中的布隆过滤器了,下面这我写的一段 Guava 布隆过滤器测试程序,可以改动 fpp 多运行几次,体验  Guava 的布隆过滤器。 
- public class GuavaBloomFilterTest { 
 -     // bit 数组大小 
 -     private static int size = 10000; 
 -     // 布隆过滤器 
 -     private static BloomFilter<String> bloomFilter = BloomFilter.create(Funnels.stringFunnel(Charset.defaultCharset()), size, 0.03); 
 -  
 -     public static void main(String[] args) { 
 -         // 先向布隆过滤器中添加 10000 个url 
 -         for (int i = 0; i < size; i++) { 
 -             String url = "https://voice.hupu.com/nba/" + i; 
 -             bloomFilter.put(url); 
 -         } 
 -         // 前10000个url不会出现误判 
 -         for (int i = 0; i < size; i++) { 
 -             String url = "https://voice.hupu.com/nba/" + i; 
 -             if (!bloomFilter.mightContain(url)) { 
 -                 System.out.println("该 url 被采集过了"); 
 -             } 
 -         } 
 -         List<String> list = new ArrayList<String>(1000); 
 -         // 再向布隆过滤器中添加 2000 个 url ,在这2000 个中就会出现误判了 
 -         // 误判的个数为 2000 * fpp 
 -         for (int i = size; i < size + 2000; i++) { 
 -             String url = "https://voice.hupu.com/nba/" + i; 
 -             if (bloomFilter.mightContain(url)) { 
 -                 list.add(url); 
 -             } 
 -         } 
 -         System.out.println("误判数量:" + list.size()); 
 -     } 
 - } 
 
  
布隆过滤器的应用 
缓存击穿 
缓存击穿是查询数据库中不存在的数据,如果有用户恶意模拟请求很多缓存中不存在的数据,由于缓存中都没有,导致这些请求短时间内直接落在了DB上,对DB产生压力,导致数据库异常。                         (编辑:我爱故事小小网_铜陵站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |