首页
编程随笔
Java笔记
Html/Css/Js
Android
后端笔记
服务器搭建
BUG收集
Java异常
Android异常
在线工具
Json格式化
编码/解码
Epub在线编辑
登录
发布文章
个人文章
退出登录
首页
技术教程
BUG收集
在线工具
资源下载
登录
发布文章
退出登录
搜索
当前位置:
首页
-
博客
- 正文
关闭
布隆过滤器的两种实现redis和Guava
更新时间:2023-07-22 11:16:20
阅读数:1779
发布者:落幕
redis版本主要使用springboot集合RedisTemplate实现,Redis数据结构为bitmap,java版本使用Guava ### redis版本 #### 初始化数据 ```java @Autowired private RedisTemplate redisTemplate; // 计算数据的hashcode用于算出下标,布隆过滤器是个字节数组所以需要为正数 int hashcode = Math.abs("test1".hashCode()); // Math.pow(2, 32)可根据实际业务设置,下标越大需要内存越多(字节数组) long index = (long)(hashcode % Math.pow(2, 32)); // 将bitmap中名为usernameBloom,下标为index设为true(1) redisTemplate.opsForValue().setBit("usernameBloom", index, true); ``` #### 校验数据 ```java int hashcode = Math.abs("test1".hashCode()); long index = hashcode % Math.pow(2, 32); boolean existUser = redisTemplate.opsForValue().getBit("usernameBloom", index); ``` ### Guava版本 #### 初始化数据 ```java // 10000代表标本数量,0.03代表误差率 BloomFilter
bloomFilter = BloomFilter.create(Funnels.stringFunnel(Charsets.UTF_8), 10000, 0.03); bloomFilter.put("test1"); ``` #### 校验数据 ```java // 判断用户是否存在 boolean existUser = bloomFilter.mightContain("test1"); ````