SpringBoot + 位图(Bitmap)+ HyperLogLog:亿级用户签到、UV 统计极致优化
引言 最近在做用户签到系统重构时遇到了一个棘手问题:每天要处理上亿用户的签到数据,传统的MySQL方案已经扛不住了。后来发现Redis的位图和HyperLogLog简直是为这种场景量身定制的神器。 很多同学可能还不知道,Redis除了基本的String、Hash这些数据结构,还有专门针对大数据统计的高级数据结构。今天就来聊聊如何用位图和HyperLogLog,让亿级用户的统计变得轻而易举。 为什么传统方案会崩? MySQL的局限性 面对亿级用户签到,传统MySQL方案的问题: 存储空间爆炸: 每个用户每天一条记录,1亿用户就是1亿条数据 按照每条记录1KB计算,一天就要100GB 一个月下来就是3TB,成本惊人 查询性能瓶颈: SELECT COUNT(DISTINCT user_id) WHERE date = '2024-01-01' 这种查询会全表扫描 即使加索引,大数据量下性能依然很差 多维度统计(月活、年活)更加困难 并发写入压力: 高峰期大量用户同时签到 数据库连接池被打满 事务锁竞争严重 Redis高级数据结构登场 位图(Bitmap)的核心优势 位图是用二进....