在Web和移动应用的业务场景中,我们经常需要保存这样一种信息:一个key对应了一个数据集合。
- 手机App中的每天的用户登录信息:一天对应一系列用户ID或移动设备ID;
- 电商网站上商品的用户评论列表:一个商品对应了一系列的评论;
- 用户在手机App上的签到打卡信息:一天对应一系列用户的签到记录;
- 应用网站上的网页访问信息:一个网页对应一系列的访问点击。
Redis集合类型的特点就是一个键对应一系列的数据,所以非常适合用来存取这些数据。在这些场景中,除了记录信息,还需要对集合中的数据进行统计。
- 在移动应用中,需要统计每天的新增用户数和第二天的留存用户数;
- 在电商网站的商品评论中,需要统计评论列表中的最新评论;
- 在签到打卡中,需要统计一个月内连续打卡的用户数;
- 在网页访问记录中,需要统计独立访客量。
通常情况下,面临的用户数量以及访问量都是巨大的,比如百万、千万级别的用户数量,或者千万级别、甚至亿级别的访问信息。所以,必须要选择能够非常高效地统计大量数据的集合类型。
要选择合适的集合,就得了解常用的集合统计模式。常见的四种统计模式,包括聚合统计、排序统计、二值状态统计和技术统计。
聚合统计
所谓聚合统计,就是指统计多个集合元素的聚合结果,包括:统计多个集合的共有元素(交集统计);把两个集合相比,统计其中一个集合独有的元素(差集统计);统计多个集合的所有元素(并集统计)。
统计手机App每天新增用户数和第二天的留存用户数,正好对应了聚合统计。
要完成这个统计任内务,可以用集合记录所有登录App的用户ID,同时,用另一个集合记录每天登录过App的用户ID,然后,再对这两个集合做聚合统计。
记录所有登录过App的用户ID,可以直接使用Set类型,把key设置为user:id,标识记录的是用户ID,value就是一个Set集合,里面是所有登录过App的用户ID,可以把这个Set叫做累计用户Set。
user:id | 100301 |
100503 | |
100218 | |
... | |
100393 |