2026/2/25 14:18:04
网站建设
项目流程
公众号申请网站,wordpress 页面内容,自学建网站做网站优化,wordpress4.9.5Redis 的 Bitmap 本质上不是“新数据类型”#xff0c;而是把 String 当成一段连续的二进制位数组来用#xff1a;每一位只有 0/1#xff0c;非常适合做“海量布尔状态”的低成本存储与聚合统计 ✅#x1f642;1#xff09;核心特性#xff1a;为什么 Bitmap 适合“业务运…Redis 的 Bitmap 本质上不是“新数据类型”而是把 String 当成一段连续的二进制位数组来用每一位只有 0/1非常适合做“海量布尔状态”的低成本存储与聚合统计 ✅1核心特性为什么 Bitmap 适合“业务运营数据”极致省内存1 个状态只占 1 bit。粗算公式N 个用户状态 ≈ N / 8 字节不含 key 与元数据。天然支持聚合支持按位统计、按位或/与/异或做集合运算活跃、留存、交集、并集。高性能单点读写位GETBIT/SETBIT接近 O(1)适合高并发写入。2命令实战最常见的“签到/活跃”模型示例按“天”记录用户是否活跃offset userIdSETBIT 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。4Bitmap 工作流文本流程图定义 span stylecolor:redKey 维度/span按天/按月/按活动 ↓ 设计 span stylecolor:redoffset 映射/spanuserId / dayIndex / featureIndex ↓ 用 span stylecolor:redSETBIT/span 写入状态0/1 ↓ 用 span stylecolor:redGETBIT/span 做实时判断 ↓ 用 span stylecolor:redBITCOUNT / BITOP/span 做统计与交并集5对比表什么时候 Bitmap 赢什么时候别硬上需求场景推荐方案原因海量用户 0/1 状态签到、是否活跃、是否命中Bitmap极省内存 易聚合需要保存“具体成员列表”并做增删查SetBitmap 只能表达位不保存成员信息只要估算去重允许少量误差HyperLogLog更省内存但不可回溯明细要保存计数/多字段位段如 3bit 等级、5bit 权重BITFIELD位段写入更紧凑需严谨规划6三条“务实避坑”建议很关键避免超大稀疏 offset例如直接用 10 亿的 userId会导致位图扩容到对应字节内存瞬间膨胀。可先做 id 压缩映射或按区间分片 key。维度要可控常用按天/按月建 key并配合 TTL避免历史数据无限增长。统计尽量在 Redis 内完成BITOP BITCOUNT 比“把数据拉回应用层遍历”更稳、更省成本。如果你告诉我你的具体业务例如签到按“用户维度”还是按“日期维度”、userId 是否连续、日活量级我可以给你一套更贴近生产的 key 设计与分片策略让 Bitmap 既省内存又不踩扩容雷。