- 应用场景:在 Web 应用的业务场景中,我们经常需要保存这样一组信息,一个 key 中对一整个集合。(例如:手机APP保存单个用户一天的登录记录信息,即一个 用户 ID 对应一组移动设备 ID 及其其他登录信息;电商网站上的商品评论信息,一个商品对应着一系列的评论信息;应用网站上的网页访问信息,一个网页对应的一系列的访问点击量等等场景)。
- Redis 中的集合数据类型就是可以保存一个 Key 对应一整个集合这样的存储结构,满足上面的存储需求,但是我们对这些数据除了存储以外还可能需要对这些数据进行一些统计计算的需求(例如:移动应用中统计每天新增的用户量及其存留用户量;电商网站中需要统计评论列表及其最新的评论;签到打卡中统计一个月内连续签到的用户数量等等需求),当我们面向的时用户量巨大,百万,千万的访问量时,我们就需要一个能够支持高效的统计大量数据的集合类型。
一、Redis 中四种集合的统计模式
(1)聚合统计
- 聚合统计就是多个集合之间进行聚合的结果,计算多个集合的差集,交集或者是并集。这些就是聚合统计中的差集统计,交集统计和并集统计。
- 这种集合的统计模式就是用于计算应用网站中统计每天新增的用户量,存留用户量,总访问的用户量等等需求。首先创建一个 Set 集合的 key-value 来存储所有的访问的用户的 ID,例如创建一个 key 位 “user:id” ,而 value 中存储的每一条访问过网站的用户 ID。之后在每天创建一个全新的 Set 集合数据,其中 key 设置为 “user:id+日期”,然后 value 就是当前访问网站的所有的用户 ID,这样一来就可以保存每天的所有访问网站的用户 ID 数据了,根据当前的日期加上 “user:id” 作为 key 从 Redis 中获取指定的 value 数据,其中保存的是当前访问的所有的用户 ID,然后将该 Set 集合与 “user:id” 为 key 的 value 保存的所有访问该网站的用户 ID 进行取差集就得到了当天新增用户的 ID 集合,取交集就得到了当天留存的用户 ID 的集合。
- 但是对于数据量比较大的情况下,使用 Set 集合来进行这些聚合计算的成本是比较高的,很