diff --git a/src/main/java/cn/hezhaohui/thumb/manager/cache/BloomFilterManager.java b/src/main/java/cn/hezhaohui/thumb/manager/cache/BloomFilterManager.java index 4d0e3bd..ab4bbd4 100644 --- a/src/main/java/cn/hezhaohui/thumb/manager/cache/BloomFilterManager.java +++ b/src/main/java/cn/hezhaohui/thumb/manager/cache/BloomFilterManager.java @@ -1,8 +1,12 @@ package cn.hezhaohui.thumb.manager.cache; +import cn.hezhaohui.thumb.mapper.ThumbMapper; +import cn.hezhaohui.thumb.model.entity.Thumb; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.google.common.hash.BloomFilter; import com.google.common.hash.Funnels; import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -35,6 +39,9 @@ public class BloomFilterManager { */ private static double FPP = 0.01; + @Resource + private ThumbMapper thumbMapper; + @PostConstruct public void init() { thumbBloomFilter = BloomFilter.create( @@ -42,6 +49,12 @@ public class BloomFilterManager { EXPECTED_INSERTIONS, FPP ); + // 从数据库加载所有历史点赞记录到布隆过滤器 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(Thumb::getUserid, Thumb::getBlogId); + thumbMapper.selectList(queryWrapper).forEach(thumb -> + thumbBloomFilter.put(buildKey(thumb.getUserid(), thumb.getBlogId())) + ); log.info("布隆过滤器初始化完成,预期插入量: {}, 误判率: {}", EXPECTED_INSERTIONS, FPP); }