Redis的集合类型的特点是一个键对应一系列值,非常适合用来存取统计的数据,比如:
每天的新增用户数和第二天的留存用户数;
统计评论列表的最新评论;
一个月内连续打卡的用户数;
UV量;
先了解一下常用的集合统计模式:
聚合统计,排序统计,二值状态统计,基数统计
聚合统计
聚合统计是指统计多个集合元素的聚合结果。包括:交集统计,差集统计,并集统计。
Set类型非常适合用来做聚合统计。
SINTER key [key ...] #返回指定所有的集合的成员的交集.时间复杂度O(N*M)
SUNION key [key ...] #返回给定的多个集合的并集中的所有成员.时间复杂度:O(N
SDIFF key [key ...] #返回一个集合与给定集合的差集的元素.O(N)
比如统计每天的新增用户数和第二天的留存用户数。
假设在2022年10月1号上线,10月1号前是没有数据的,累计用户set是空的。10月1号登陆的用户记录在key为user🆔20221001的集合set中,计算累计用户set和user🆔20221001的并集结果,存在user:id的集合中(user:id集合是累计用户集合),到了10月2号,登录的用户记录在user🆔20221002的集合中,执行SDIFFSTORE计算user:id与user🆔20221002的差集,存在user:new中,user:new就是10月2号的新增用户。对user🆔20221001和user🆔20221002进行交集计算就是留存用户数。
由于计算复杂度较高,需要选择一个从库,或者放在客户端去进行聚合统计,防止主库阻塞。
排序统计
需要对集合类型进行排序。
LIST和SOERTED SET是有序集合。
LIST是按照原始进入LIST的顺序进行排序
SORTED是按照元素的权重进行排序,我们可以自己来决定每个元素的权重值。
比如最新评论列表的场景。
当使用LIST存储时,每当有一个新评论,可以使用LPUSH插入到LIST的对头。
LPUSH product "A&