本地服务器定时从redis拉取最新的bitmap值并更新本地的bitmap值,如果本地服务器有新增值,则将新增的值同步到redis服务器上

实现代码如下:
public class BloomFilterHelper<T> {
private int numHashFunctions;
private Funnel<T> funnel;
private int bitSize;
private BitArray bitArray;
private String key;
private volatile static Map<String,BloomFilterHelper> LOCALBLOOM= new ConcurrentHashMap<>();
private static Object Lock=new Object();
public static ThreadLocal<String> CurrentBloomKey=new ThreadLocal<>();
/**
* 生成布隆过滤器
* @param key
* @param funnel
* @param expectedInsertions 布隆过滤器容量
* @param fpp 布隆过滤器误差率
* @param <T>
* @return
*/
public static <T> BloomFilterHelper create(String key,Funnel<T> funnel, int expectedInsertions, double fpp){
if(LOCALBLOOM.containsKey(key)){
return LOCALBLOOM.get(key);
}else{
synchronized (Lock){
if(LOCALBLOOM.containsKey(key)){
return LOCALBLOOM.get(key);
}else{
RedisTemplate redisTemplate = getRedisTemplate();
if(redisTemplate==null){
return null;
}
BloomFilterHelper bloomFilterHelper=new BloomFilterHelper(key,funnel,expectedInsertions,fpp);
LOCALBLOOM.put(key,bloomFilterHelper);
CurrentBloomKey.set(key);
BitArray bitArray =(BitArray) redisTemplate.opsForValue().get(key);
return bloomFilterHelper;
}
}
}
}
/**
* 刷新布隆过滤器
*/
public static void refreshBloom(){

该博客探讨了如何实现本地服务器的布隆过滤器与Redis之间的数据同步。内容包括定期从Redis获取最新bitmap更新,并在本地有新增值时将这些值同步回Redis服务器的实现代码。
最低0.47元/天 解锁文章
1194

被折叠的 条评论
为什么被折叠?



