如何实现亿级数据统计?
在移动应用的业务场景中,我们需要保存这样的信息:一个 key 关联了一个数据集合。
常见的场景如下:
- 给一个 userId ,判断用户登陆状态;
- 显示用户某个月的签到次数和首次签到时间;
- 两亿用户最近 7 天的签到情况,统计 7 天内连续签到的用户总数;
通常情况下,我们面临的用户数量以及访问量都是巨大的,比如百万、千万级别的用户数量,或者千万级别、甚至亿级别的访问信息。
所以,我们必须要选择能够非常高效地统计大量数据(例如亿级)的集合类型。
如何选择合适的数据集合,我们首先要了解常用的统计模式,并运用合理的数据了性来解决实际问题。
四种统计类型:
- 二值状态统计;
- 聚合统计;
- 排序统计;
- 基数统计。
本文将由二值状态统计类型作为实战篇系列的开篇,文中将用到 Bitmap 来实现。
文章涉及到的指令可以通过在线 Redis 客户端运行调试,地址:https://try.redis.io/,超方便的说。
二值状态统计
什么是二值状态统计呀?
也就是集合中的元素的值只有 0 和 1 两种,在签到打卡和用户是否登陆的场景中,只需记录签到(1)或 未签到(0),已登录(1)或未登陆(0)。
假如我们在判断用户是否登陆的场景中使用 Redis 的 String 类型实现(key -> userId,value -> 0 表示下线,1 - 登陆),假如存储 100 万个用户的登陆状态,如果以字符串的形式存储,就需要存储 100 万个字符串了,内存开销太大。
为什么 String 类型内存开销大?
String 类型除了记录实际数据以外,还需要额外的内存记录数据长度、空间使用等信息。
当保存的数据包含字符串,String 类型就使用简单动态字符串(SDS)结构体来保存:
- len:占 4 个字节,表示 buf 的已用长度。
- alloc:占 4 个字节,表示 buf 实际分配的长...
未能定位到原文的划线
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
1. 微信扫右侧的优惠券加入知识星球
2. 解锁星球的实战项目教程和源码: 项目源码+教程获取
真诚点赞 诚不我欺
回复