news 2026/7/4 1:29:09

蓝易云 - Redis之bitmap类型解读

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
蓝易云 - Redis之bitmap类型解读

Redis 的 Bitmap 本质上不是“新数据类型”,而是把 String 当成一段连续的二进制位数组来用:每一位只有 0/1,非常适合做“海量布尔状态”的低成本存储与聚合统计 ✅🙂


1)核心特性:为什么 Bitmap 适合“业务运营数据”

  • 极致省内存:1 个状态只占 1 bit。粗算公式:N 个用户状态 ≈ N / 8 字节(不含 key 与元数据)。

  • 天然支持聚合:支持按位统计、按位或/与/异或做集合运算(活跃、留存、交集、并集)。

  • 高性能:单点读写位(GETBIT/SETBIT)接近 O(1),适合高并发写入。


2)命令实战:最常见的“签到/活跃”模型

示例:按“天”记录用户是否活跃(offset = userId)

SETBIT active:20251227 10001 1 GETBIT active:20251227 10001 BITCOUNT active:20251227

解释:

  • SETBIT key offset value:把active:20251227的第10001位设置为1,表示该用户当天活跃。offset 越大,底层字符串会扩容,因此 userId 若跨度极大要评估内存。

  • GETBIT:读取该用户当天是否活跃,返回 0/1,适合接口秒级判断。

  • BITCOUNT:统计整张位图中为 1 的数量,可直接得到当天 DAU(日活)。


3)留存/交集:用位运算直接算(企业最爱这一步)

BITOP AND retain:20251226_20251227 active:20251226 active:20251227 BITCOUNT retain:20251226_20251227

解释:

  • BITOP AND destkey key1 key2:对两天活跃位图做按位与,只有两天都为 1 的用户位才会保留为 1,这就是 次日留存人数。

  • BITCOUNT destkey:统计留存人数,避免把明细拉回业务层计算,省网络与 CPU。


4)Bitmap 工作流(文本流程图)

定义 <span style="color:red">Key 维度</span>(按天/按月/按活动) ↓ 设计 <span style="color:red">offset 映射</span>(userId / dayIndex / featureIndex) ↓ 用 <span style="color:red">SETBIT</span> 写入状态(0/1) ↓ 用 <span style="color:red">GETBIT</span> 做实时判断 ↓ 用 <span style="color:red">BITCOUNT / BITOP</span> 做统计与交并集

5)对比表:什么时候 Bitmap 赢,什么时候别硬上

需求场景推荐方案原因
海量用户 0/1 状态(签到、是否活跃、是否命中)Bitmap极省内存 + 易聚合
需要保存“具体成员列表”并做增删查SetBitmap 只能表达位,不保存成员信息
只要估算去重(允许少量误差)HyperLogLog更省内存,但不可回溯明细
要保存计数/多字段位段(如 3bit 等级、5bit 权重)BITFIELD位段写入更紧凑(需严谨规划)

6)三条“务实避坑”建议(很关键)

  1. 避免超大稀疏 offset:例如直接用 10 亿的 userId,会导致位图扩容到对应字节,内存瞬间膨胀。可先做 id 压缩映射或按区间分片 key。

  2. 维度要可控:常用按天/按月建 key,并配合 TTL,避免历史数据无限增长。

  3. 统计尽量在 Redis 内完成:BITOP + BITCOUNT 比“把数据拉回应用层遍历”更稳、更省成本。🙂

如果你告诉我你的具体业务(例如:签到按“用户维度”还是按“日期维度”、userId 是否连续、日活量级),我可以给你一套更贴近生产的 key 设计与分片策略,让 Bitmap 既省内存又不踩扩容雷。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 13:03:19

如何为自研模型定制TensorRT插件?

如何为自研模型定制TensorRT插件&#xff1f; 在AI产品日益追求极致性能的今天&#xff0c;一个训练好的模型能否真正“跑得快”&#xff0c;往往决定了它是否能从实验室走向生产线。尤其是在自动驾驶、实时视频分析或大规模推荐系统中&#xff0c;哪怕几毫秒的延迟差异&#x…

作者头像 李华
网站建设 2026/7/1 20:37:43

TensorRT动态批处理功能详解及其应用场景

TensorRT动态批处理功能详解及其应用场景 在AI服务从实验室走向生产环境的过程中&#xff0c;一个绕不开的挑战是&#xff1a;如何在高并发、低延迟的要求下&#xff0c;依然保持高效的GPU利用率&#xff1f;尤其是在推荐系统、语音识别或自然语言处理这类请求频繁且输入长度不…

作者头像 李华
网站建设 2026/7/1 22:06:35

边缘计算场景下TensorRT的优势与挑战

边缘计算场景下TensorRT的优势与挑战 在智能制造工厂的质检线上&#xff0c;摄像头每秒捕捉数百帧产品图像&#xff0c;后台系统必须在毫秒级内判断是否存在划痕或装配缺陷。若将这些数据传至云端处理&#xff0c;网络延迟可能超过200ms&#xff0c;不仅无法满足实时性要求&am…

作者头像 李华
网站建设 2026/7/1 22:04:23

FP16 vs INT8:TensorRT精度与速度的平衡之道

FP16 vs INT8&#xff1a;TensorRT精度与速度的平衡之道 在当今AI模型日益庞大的背景下&#xff0c;推理效率已成为决定系统能否落地的关键瓶颈。一个训练得再精准的模型&#xff0c;如果在线上服务中响应延迟高达数百毫秒、吞吐量仅个位数FPS&#xff0c;那它的商业价值几乎为…

作者头像 李华
网站建设 2026/7/1 22:01:54

LeetCode 458 - 可怜的小猪

文章目录摘要描述题解答案题解代码分析先搞清楚“一只猪有多少种状态”为什么是指数关系&#xff1f;Swift 实现思路可运行 Swift Demo 代码示例测试及结果与实际场景结合时间复杂度空间复杂度总结摘要 这道题乍一看是个“喂猪试毒”的奇怪问题&#xff0c;但本质其实是一个信…

作者头像 李华