Redis 布隆过滤器性能对比分析

打印 上一主题 下一主题

主题 955|帖子 955|积分 2865

redis 实现布隆过滤器实现方法:

1、redis 的 setbit 和 getbit

特点:对于某个bit 设置0或1,对于大量的值需要存储,非常节省空间,查询速度极快,但是不能查询整个key所有的bit,在一次请求有大量的值需要过滤的场景会出现多次请求getbit,性能会急剧下降,需要把多个gitbit归并成批次,使用lua脚本大概pipeline执行提高服从。
2、redis 的 BF.RESERVE,BF.MADD和 BF.MEXISTS

特点:redis 4.0 以上官方提供的一个插件,原生Bloom过滤器,参数包罗 布隆过滤器的大小,误差率等,支持批量写入和批量查询,性能更优,针对一次大量请求,批量查询接口性能更快。
以上两种布隆过滤器性能测试效果对比:

硬件:单节点 redis,2G内存,2核cpu
测试条件:布隆过滤器容量都是 10000,容错率都是:0.001, 场景:一次请求需要过滤10000个id,每100个批量查询一次redis, 如此循环 10次。
序号redis setbit getbit(时延单位:毫秒)redis BF.RESERVE,BF.MADD和 BF.MEXISTS (时延单位:毫秒)115561238214751164317349894303417015153212546157911797154111778156710459169812161016891275平均1740.51223.8 3、基于以上的测试效果,假如一次保举请求用户已经看过10000个视频,需要过滤10000个视频,时延会上涨到秒级以上,这样对于高并发情况性能是不行的,还有其他的办法嘛? 能不能一次性把整个布隆过滤器读到本地再进行过滤?

在保举场景,布隆过滤器设置了容量5000个,容错率是0.001,布隆过滤器的最大值为:17972 byte,约 17K,假如每次写入和查询都查询整个布隆过滤器,1000qps 占用的网络带宽为: 13.92 Mbps。
测试可行性:本地构造一个布隆过滤器对象 BitSet,BitSet的最大值是int的最大,从redis查询出来序列化成BitSet对象,再进行读写操作,假如是写操作,再序列化写入redis。
  1. private BitSet get(long userId) {
  2.     String key = TestBloomP.getBitMapKey(userId, "111");
  3.     log.info("get bitset key:{}", key);
  4.     return (BitSet) redisTemplate.opsForValue().get(key);
  5. }
  6. private void add(long userId, List<Long> filterItems) {
  7.     BitSet bitSet = new BitSet();
  8.     for (Long item : filterItems) {
  9.         String uniqueKey = userId + ":" + item;
  10.         List<Integer> offsets = TestBloomP.getOffsets(uniqueKey);
  11.         for (Integer offset : offsets) {
  12.             bitSet.set(offset);
  13.         }
  14.     }
  15.     String key = TestBloomP.getBitMapKey(userId, "111");
  16.     log.info("add bitset key:{}, size:{}", key, bitSet.size());
  17.     redisTemplate.opsForValue().set(key, bitSet);
  18. }
复制代码
redis 使用java默认的序列化工具JdkSerializationRedisSerializer,测试效果 如下:写操作会先读再写 时延都是很低:
add bitset key:shop_video:filter_exposed:1607433260630157, size:143808, add count:1, time:36
get bitset time:9, bitset :143808

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

九天猎人

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表