布隆过滤器是防止缓存穿透的方案之一。布隆过滤器主要是解决大规模数据下不需要精确过滤的业务场景,如检查垃圾邮件地址,爬虫URL地址去重, 解决缓存穿透问题等。
布隆过滤器:在一个存在一定数量的集合中过滤一个对应的元素,判断该元素是否一定不在集合中或者可能在集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。
2. guava 实现google的guava工具类已经帮我们造好了轮子,通过实例来感受一下。
2.1 导入依赖 2.2 BloomFilterTest 2.3 启动测试如上代码,我们设置了0.01的误差,过滤判断时从1000000到3000000,误判了2 * 20000000 ≈ 20339 符合预期。
..... 21:40:21.529 [main] INFO com.ldx.redisson.controller.BloomFilterTest - 2999004误判了 21:40:21.529 [main] INFO com.ldx.redisson.controller.BloomFilterTest - 2999045误判了 21:40:21.529 [main] INFO com.ldx.redisson.controller.BloomFilterTest - 2999219误判了 21:40:21.529 [main] INFO com.ldx.redisson.controller.BloomFilterTest - 2999699误判了 21:40:21.529 [main] INFO com.ldx.redisson.controller.BloomFilterTest - 2999753误判了 21:40:21.529 [main] INFO com.ldx.redisson.controller.BloomFilterTest - 2999838误判了 21:40:21.529 [main] INFO com.ldx.redisson.controller.BloomFilterTest - 2999923误判了 21:40:21.529 [main] INFO com.ldx.redisson.controller.BloomFilterTest - 2999928误判了 21:40:21.529 [main] INFO com.ldx.redisson.controller.BloomFilterTest - 总共的误判数:20339
2.4 小节guava的工具包虽然好用,但是数据集是存储在jvm中的,分布式环境下依然没法使用。
3. redisson 实现 3.1 导入依赖 3.2 BloomFilterWithRedisson 3.3 启动测试由于机器性能有限,又是单机环境,所以程序没有跑完。
但由此也可以看出,基于redis的布隆过滤器虽然解决了分布式问题,但是性能和guava bloomfilter没法比。
到此这篇关于Redis BloomFilter实例讲解的文章就介绍到这了,更多相关Redis BloomFilter实例内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!