本地布隆过滤器同步至redis

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本地服务器定时从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(){
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值