Java実装ブロンフィルタ


guavaはブロンフィルタを実現しました.直接使用すればいいです.

     com.google.guava
     guava
         

次に、
import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;

import java.util.Objects;

public class Test {

	//         
	private static int size = 1000000;

	//      
	private static double fpp = 0.01;

	//     
	private static BloomFilter bloomFilter = BloomFilter.create(Funnels.integerFunnel(), size, fpp);

	public static void main(String[] args) {
		//    
		for (int i = 0; i < 1000000; i++) {
			bloomFilter.put(i);
		}
		double count = 0;
		//     
		for (int i = 1000000; i < 2000000; i++) {
			if (bloomFilter.mightContain(i)) {
				count++;
			}
		}
		System.out.println("      :" + count/1000000);
	}

	//       
	public String getObject(String key) {

		String value = redis.get(key);
		if (Objects.isNull(value)) {
			// redis       
			if(!bloomFilter.mightContain(key)){
				//        ,    
				return null;
			}else{
				//         ,      ,     redis
				value = db.get(key);
				redis.set(key, value);
			}
		}
		return value;
	}

}