为了能到远方,脚下的每一步都不能少.|

Blue Mountain

园龄:10年7个月粉丝:572关注:0

2023-01-05 22:26阅读: 24评论: 0推荐: 0

<<Redis 核心技术与实战>> 小记随笔 —— 有一亿个keys要统计,应该用哪种集合?

聚合统计

应用场景

统计手机 App 每天的新增用户数和第二天的留存用户数

解决方案

由于Set 类型可以实现并集、交集、差集等能力。所以设计一个 Set 存所有的用户 Id, 并且每天新建一个 Set 存当天访问的用户Id,然后通过并集、交集、差集的计算得出结果。
方案关键点:这些 Set 的计算比较容易耗资源,所以最好是在 Redis 集群的一个从库来做这些计算,不要堵塞主 Redis 的业务。

排序统计

应用场景

最新评论列表包含了所有评论中的最新留言

解决方案

  • List 有序集合
    可以按照插入顺序来实现。
  • Sorted Set 可以根据元素的权重来排序
    可以把插入的时间作为权重来实现。

二值状态统计

应用场景

如果记录了 1 亿个用户 10 天的签到情况,你有办法统计出这 10 天连续签到的用户总数吗?

解决方案

使用 Bitmap 来实现存储二值状态。

  • 支持按位设置、读取
  • 支持统计1的总数
  • 支持位与、位或等运算
    每一天创建一个 Bitmap,每一位表示一个用户是否签到,1表示签到,0表示未签到,然后把10天对应的 Bitmap 做位与运算,然后统计下计算结果的 Bitmap 签到的总和即可。

基数统计

应用场景

统计网页一天的 UV,这个场景的特点就是每个用户一天中重复登录几次也只会统计一次。

解决方案:

  • 使用 Set 或者 Hash 类型可以实现,但是很占用内存。
  • 使用 HyperLogLog 类型,但是这个算法是基于概率统计完成的,所以会有一定的误差,标准误差率是0.81%,但是很节省内存,仅12KB

本文作者:Blue Mountain

本文链接:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/17029018.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Blue Mountain  阅读(24)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.