Redis集合统计模式

  1. Redis集合统计模式
  2. 1. 聚合统计
    1. 1.1 概念
    2. 1.2 案例分析
  3. 2. 排序统计
    1. 2.1 概念
    2. 2.2 案例
  4. 3. 二值状态统计
    1. 3.1 概念
    2. 3.2 案例
  5. 4. 基数统计
    1. 4.1 概念
    2. 4.2 案例

Redis集合统计模式

1. 聚合统计

1.1 概念

  • 统计多个集合元素的聚合结果
    • 交集统计 — 统计多个集合的共有元素
    • 差集统计 — 统计其中一个集合独有的元素
    • 并集统计 — 统计多个集合的所有元素
  • 聚合统计可以使用Set类型来做
  • 但是Set的差集,并集,交集的计算复杂度比较高,在数据量比较大的情况下,直接执行可能会导致Redis实例阻塞。
  • 可以从主从集群当中选择一个从库,使其专门负责聚合计算,或者将数据读取到客户端,在客户端完成聚合统计

1.2 案例分析

  • 统计一个手机App的每天的新增用户数和第二天的留存用户数
  • 用一个集合记录所有登陆过App的用户Id
    • key — user:id
    • value — set类型 记录用户id
  • 另外一个集合记录每天用户set
    • key — user:id:20210808
    • value — set类型 记录用户id
// 差值统计
SUNIONSTORE user:id user:id user:id:20210808

// 计算新用户
SDIFFSTORE user:new user:id:20210808 user:id 

// 计算留存用户
SINTERSTOPRE user:id:rem user:id:20210808 user:id:20210809

2. 排序统计

2.1 概念

  • 需要能对输出进行排序,Redis常用的4个集合类型当中 (List, Hash, Set, Sorted Set), List和Sorted Set属于有序集合
  • List按照元素进入List的顺序排序,而Sorted Set可以根据元素的权重来排序

2.2 案例

  • 电商网站上提供最新评论列表的场景
  • List在这个场景里面的问题
    • 因为根据位置排序,当有新的评价加进来,那么可能会有一些评价会在不同页面重复出现
  • Sorted Set不存在这个问题,因为它是根据元素的实际权重来排序和获取数据的
    • 我们可以按照评论时间的先后给每条评论设置一个权重值,然后将评论保存到Sorted Set当中
    • ZRANGEBYSCORE命令就可以按照权重排序以后返回元素

3. 二值状态统计

3.1 概念

  • 指集合元素的取值只有0和1两种
  • 计算海量二值状态数据的时候,bitmap可以有效减少所需的内存空间

3.2 案例

  • 签到统计
    • 每个用户一天的签到用一个bit位就能表示
    • 因此并不需要非常复杂的数据类型,使用bitmap就可以了
  • Redis提供了Bitmap类型
    • GETBIT
    • SETBIT
      • 将某一位设置为1
    • BITCOUNT
      • 用来统计所有1的个数
// 记录用户8 3 签到了
SETBIT uid:sign:3000:202008 2 1 

// 检查是否8 3 签到了
GETBIT uid:sign:3000:202008 2 

// 统计该用户8月份的签到次数
BITCOUNT uid:sign:3000:202008 
  • 如何统计一亿个用户连续10天的签到情况
    • 将每天日期作为key,每个key对应一个1亿位的bitmap 每一个bit对应一个用户当天的签到情况
    • 对10个bitmap做与操作
    • 然后用BITCOUNT统计下最终生成的Bitmap当中1的个数

4. 基数统计

4.1 概念

  • 基数统计指统计一个集合中不重复的元素的个数

4.2 案例

  • 统计一个网页的UV
    • 需要去重,一个用户一天内的多次访问只能算一次
  • 可以使用SET或者HASH类型来进行记录,但是会消耗很大的内存空间
  • 可以使用HyperLogLog
    • 用于统计基数的数据集合类型
    • 优势在于当集合元素数量非常多的时候,计算基数所需的空间总是固定的,而且还很小
    • Redis中每个HyperLogLog只需要使用12KB内存,就可以计算接近2^64个元素的基数
  • HyperLogLog的统计规则是基于概率完成的,因此其给出的统计结果是有一定误差的,标准误算率为0.81% ; 如果应用场景是必须非常精确,那就还需要使用Set或者Hash类型
PFADD page1:uv  user1 user2 user3 user4 

PFCOUNT page1:uv 

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 stone2paul@gmail.com

文章标题:Redis集合统计模式

文章字数:1k

本文作者:Leilei Chen

发布时间:2021-08-09, 07:32:13

最后更新:2021-08-09, 07:32:56

原始链接:https://www.llchen60.com/Redis%E9%9B%86%E5%90%88%E7%BB%9F%E8%AE%A1%E6%A8%A1%E5%BC%8F/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏