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;
	}

}

 

你可能感兴趣的:(布隆过滤器,语言,数据库,redis,java)