针对每天千万级访问量,且不要求 100% 精确的 UV(独立访客)统计需求,Redis 最完美的解决方案是使用 HyperLogLog 数据结构。 下面是详细的分析和设计方案: 1. 为什么选择 HyperLogLog? 在 Redis 中,统计去重数据通常有三种选择:、 和 。我们来做个对比: Set(集合): 可以做到 100% 准确。但是极其消耗内存。如果一个用户 ID 是 32 字节的字符串,千万级 UV 一天需要占用约 300MB - 500MB 的内存。一个月就是十几 GB,成本太高。 Bitmap(位图): 内存占用小(一千万连续用户 ID 约占用 1.2MB)。但前提是用户 ID 必须是连续的数字。如果业务用的是 UUID、设备指纹或非连续 ID,Bitmap 就会变得极其稀疏,导致内存浪费,且需要维护 ID 映射表,极其繁琐。 HyperLogLog(基数统计): 极限省内存: 无论统计多少个用户(最多支持 $2^{64}$ 个),每个 Key 最大只占用 12 KB 的内存。 满足误差允许条件: 它是概率算法,标准误差率在 0.81% 左右。对于千万级 UV,...