在查redis缓存之前往往先经过布隆过滤器,达到防止缓存穿透的作用
布隆过滤器原理以及优缺点可以看博客
布隆过滤器的原理,优缺点_m0_53611007的博客-CSDN博客_布隆过滤器的优缺点
看代码:
/**
* @author:yuze
* @description:我的极简布隆过滤器
* @data:2022/2/13
*/
public class MyBloomFilter {
private int[] bloomFilter = new int[1024];//存放标志的数组
public void add(String key){//添加缓存key的函数
int hash = key.hashCode() % bloomFilter.length > 0 ? key.hashCode() % bloomFilter.length : -key.hashCode() % bloomFilter.length;//计算hash
if (bloomFilter[hash] == 1){//当前位置已经为1说明缓存过了
return ;
}else {
bloomFilter[hash] = 1;
return;
}
}
public boolean findKey(String key){//查看key是否在过滤器中
int hash = key.hashCode() % bloomFilter.length > 0 ? key.hashCode() % bloomFilter.length : -key.hashCode() % bloomFilter.length;
if(bloomFilter[hash] == 1){
return true;
}
return false;
}
public static void main(String[] args) {
String s = "yuze";
String s1 = "zhangsan";
MyBloomFilter bloomFilter = new MyBloomFilter();
bloomFilter.add(s);
System.out.println(bloomFilter.findKey(s));
System.out.println(bloomFilter.findKey(s1));
}
}
结果: