news 2026/4/24 20:53:19

基于Redis bitmaps人群圈群

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于Redis bitmaps人群圈群

由于基于bitmap技术的圈群场景在Clickhouse和Doris的压测表现不是很理想,查阅了资料发现很少有文章提到bitmap在高并发人群圈选的性能问题,难道钱能解决的问题就不是问题了?由于硬件资源有限只能通过工程去弥补这个问题,于是我做了一系列的尝试和测试,有了以下的一些测试和演进方案。

测试方案

方案1:基于SQL哈希,缓存结果

这个方式能够解决同一SQL的多次查询,如果遇到真实的高并发场景,依旧还是无法真正的解决问题。
如果是模拟真实场景下的压力测试,规则中的值应该是随机生成的,这种方案不攻自破了。

方案2:使用内存表

既然频繁从硬盘I/O会占用CPU,那我直接使用内存表如何?经过测试最终测试效果不太理想,CPU依旧还是居高不下。
https://github.com/ClickHouse/ClickHouse/issues/6880 中提到

Through the result of callgrind could we see that the major overhead comes from the serialization.
通过 callgrind 的结果,我们可以看到主要的查询开销来自序列化。

基于Redis bitmaps人群圈选 v0.1

Clickhouse或者Doris如果在高并发场景下频繁的访问磁盘进行I/O操作并且又有bitmap对CPU计算的依赖,CPU基本上都会飙升,导致TPS下降,即使使用内存表还是无法直接解决CPU占用过高的问题。
由于之前做人群名单导出的时候,使用过Redis进行存储RoaringBitmap的结果,但是通过二进制的方式而非使用Redis bitmaps。
受到文章画像系统人群服务数据存储架构的演进与创新的启发,阅读了下Redis bitmaps文档才发现Redis bitmaps支持的操作,基本上可以完全支持人群圈选,如果要基于Redis bitmaps做人群圈选,需要使用Redis bitmaps方式进行存储。
参考文档:Redis bitmaps

在开始验证之前就遇到了一个痛点问题:

使用SETBIT方式保存结果过慢

由于使用SETBIT方式保存结果过慢,差点让我放弃了这个想法,最终通过参考这篇文章解决了这个问题。
redis bitmap数据结构之java对等操作

单元测试方案

CrowdSelector.java
packagecom.example.demo.redis;importcom.fasterxml.jackson.databind.JsonNode;importcom.fasterxml.jackson.databind.node.ArrayNode;importredis.clients.jedis.Jedis;importredis.clients.jedis.args.BitOP;importjava.util.*;publicclassCrowdSelector{privateJedisjedis;privateList<String>tempKeys=newArrayList<>();publicCrowdSelector(Jedisjedis){this.jedis=jedis;}publicStringevaluateRule(JsonNoderule){if(rule.has("tag")){return"tag:"+rule.get("tag").asText();}Stringop=rule.get("op").asText();ArrayNoderules=(ArrayNode)rule.get("rules");List<String>childKeys=newArrayList<>();for(inti=0;i<rules.size();i++){JsonNodechild=rules.get(i);childKeys.add(evaluateRule(child));}StringresultKey="temp:result:"+UUID.randomUUID().toString();tempKeys.add(resultKey);if("AND".equalsIgnoreCase
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 20:48:58

告别审查:Windows XP系统运行GoodbyeDPI的兼容性挑战与解决方案

告别审查&#xff1a;Windows XP系统运行GoodbyeDPI的兼容性挑战与解决方案 【免费下载链接】GoodbyeDPI GoodbyeDPI — Deep Packet Inspection circumvention utility (for Windows) 项目地址: https://gitcode.com/GitHub_Trending/go/GoodbyeDPI GoodbyeDPI是一款强…

作者头像 李华
网站建设 2026/4/24 20:46:00

从‘合闸’到‘分闸’:一张图搞懂煤矿馈电开关内部机械与电气联动逻辑

煤矿馈电开关机械-电气联动全流程拆解&#xff1a;从储能到分闸的精密协作 站在井下昏暗的巷道里&#xff0c;馈电开关的合闸声如同工业交响乐的序章。这个看似简单的动作背后&#xff0c;隐藏着电磁力与机械力精妙配合的物理诗篇——释压线圈的预压缩、合闸线圈的爆发力、机械…

作者头像 李华
网站建设 2026/4/24 20:42:48

如何快速配置Chrome调试器:10个实用技巧和最佳实践

如何快速配置Chrome调试器&#xff1a;10个实用技巧和最佳实践 【免费下载链接】vscode-chrome-debug Debug your JavaScript code running in Google Chrome from VS Code. 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-chrome-debug Chrome调试器是开发者必备…

作者头像 李华
网站建设 2026/4/24 20:42:21

为什么你的断点不生效?Chrome调试器断点机制完全解析

为什么你的断点不生效&#xff1f;Chrome调试器断点机制完全解析 【免费下载链接】vscode-chrome-debug Debug your JavaScript code running in Google Chrome from VS Code. 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-chrome-debug 在前端开发中&#xff0…

作者头像 李华
网站建设 2026/4/24 20:39:21

别再只盯着双塔模型了!聊聊Look-Alike召回:从广告投放到内容推荐的‘人群扩散’玩法

从广告到内容推荐&#xff1a;Look-Alike技术的跨领域实践与思考 在推荐系统与计算广告的交汇处&#xff0c;Look-Alike技术正悄然改变着两种看似迥异却又本质相通的业务场景。这项起源于广告投放的技术&#xff0c;如今已成为解决内容平台冷启动问题的利器。当技术从业者还在热…

作者头像 李华