布隆过滤器的代码演示
布隆过滤器实际上算得上是一种数据结构,一个算法的hash set ,与一般不同的是他不需要存储key的值,他是通过对数据取模在记录到相应的比特位上面去,来判断key是否存在集合中
是一种概率型的数据结构,可以用于判定一个数据是否存在,有一定的误判率,牺牲精确度换取空间和时间效率的算法
		结构:二进制数组 一系列的hash
		特征:
			  判定一个数据存在,可能不存在
			  判定一个数据不存在,就一定不存在 
			  删除更新困难
		因子:
			  1.hash函数的个数
			  2.二进制数组的长度
		代码:
			  1.google guava
			  2.redisson
			  3.redis框架
代码实现
基于Redis实现分布式的布隆过滤器
@Autowired private RedissonClient redissonClient; @Test void fenbushiBloom(){ RBloomFilter<Object> bf = this.redissonClient.getBloomFilter("bf"); bf.tryInit(20,0.3); bf.add("1"); bf.add("2"); bf.add("4"); bf.add("3"); bf.add("5"); bf.add("6"); bf.add("7"); System.out.println(bf.contains("1")); System.out.println(bf.contains("3")); System.out.println(bf.contains("5")); System.out.println(bf.contains("7")); System.out.println(bf.contains("8")); System.out.println(bf.contains("9")); System.out.println(bf.contains("0")); }
基本的单机布隆过滤器
public static void main(String[] args) { BloomFilter<CharSequence> bloomFilter = BloomFilter.create(Funnels.stringFunnel(Charsets.UTF_8), 20, 0.3); bloomFilter.put("1"); bloomFilter.put("2"); bloomFilter.put("3"); bloomFilter.put("4"); bloomFilter.put("5"); bloomFilter.put("6"); bloomFilter.put("7"); System.out.println(bloomFilter.mightContain("1")); System.out.println(bloomFilter.mightContain("3")); System.out.println(bloomFilter.mightContain("5")); System.out.println(bloomFilter.mightContain("7")); System.out.println(bloomFilter.mightContain("9")); System.out.println(bloomFilter.mightContain("12")); System.out.println(bloomFilter.mightContain("13")); System.out.println(bloomFilter.mightContain("15")); System.out.println(bloomFilter.mightContain("16")); }
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号