《Redis开发与运维读书笔记》
数据结构模型
HyperLogLog本身不是新的一种数据结构,实际类型为字符串。而是一种 基数算法 。
通过HyperLogLog可以用极小的内存空间完成独立总数的计算,数据集可以是IP、Email、ID等。
常用命令:
-
添加
pfadd key element [element...]
如果添加成功返回 1 -
计算独立数
pfcount key [key...]
-
合并数
pfmerge destkey sourcekey [sourcekey...]
HyperLogLog分析
HyperLogLog内存占用量非常小,但存在错误率。开发者在进行数据结构选型时只需要确认如下亮点即可:
- 只为了独立基数,不需要获取单条数据
- 可以容忍一定的错误率。Redis官方未出的失误率是
0.81%
应用场景
每个独立用户对网站的访问记录
- 将用户访问过网站的用户ID添加到HyperLogLog中
pfadd unique:users:2018-09-19 ${userId}
其中${userId}
为用户ID - 获取 2018-09-19 这一天独立访问的用户数
pfcount unique:users:2018-09-19
- 获取 2018-09-19 和 2018-09-20 这两天都访问过网站的用户
pfmerge unique:users:2018-09-19-20 unique:users:2018-09-19 unique:users:2018-09-20
与Set内存使用比较
HyperLogLog 实现独立 IP 计算功能
独立 IP 数量 | 一天 | 一个月 | 一年 | 一年(使用集合) |
---|---|---|---|---|
一百万 | 12 KB | 360 KB | 4.32 MB | 5.4 GB |
一千万 | 12 KB | 360 KB | 4.32 MB | 54 GB |
一亿 | 12 KB | 360 KB | 4.32 MB | 540 GB |