活跃用户统计

一,功能背景

  领导偶然间问起我们的考核系统使用情况如何,最近考虑下做个活跃用户统计功能

二,功能设计

  针对性能上要求实时统计,用户名都为8位数字等特点,拟采用redis方案:

  使用bitmap,用户登录的同时,将用户所在的位置为1

三,代码

  1,直接上代码

  

public void setUserActive(Integer id) {
          Date currentTime = new Date();
          String currentStr = new SimpleDateFormat("yyyy-MM-dd").format(currentTime);
          String key = "login:"+currentStr;
          try {
              cluster.setbit(key, id, true);
          } catch (Exception e) {
              log.error("登录激活用户计数出错:"+id+","+e);
          }
}

  用户登录的功能模块调用该方法,bitmap按照日期创建,即每天创建一个,垃圾回收委托给redis的GC机制。

  行内用户是8位数字,所以支持千万级的用户统计,经测试,性能较好。如果用户名非数字,可以通过哈希算法转换,本人暂未测试。

 2,统计

  

public long getActiveUserCount(int period) {
        Date currentTime = new Date();
        long bitCount = 0;
     SimpleDateFormat sf = new SimpelDateFormat("yyyy-MM-dd");
        try {
            for (int i = 0; i < period; i++) {
                //获得前一天的日期
                String currentStr = sf.format(currentTime);
                String key = "login:" + currentStr;
                //获得这一天日期的活跃用户字节数组
                bitCount += cluster.bitcount(key, 1, 99999999);
                currentTime = DateUtils.addDays(currentTime, -1);
            }
        } catch (Exception e) {
            log.error("查询"+day+"天内活跃用户出错!"+e);
            return 0;
        }
        //统计人数
        return bitCount;
    }

  其中period指统计周期,我统计的是一周,传参为7,

  bicount方法后两位参数是start和end,在该范围内统计1的个数。这样就实现了活跃用户统计

原文地址:https://www.cnblogs.com/superchong/p/11128451.html

时间: 2024-11-06 09:42:56

活跃用户统计的相关文章

[PHP]基于Sort Set进行活跃用户统计

作者:zhanhailiang 日期:2014-12-14 参考文章: 使用Redis bitmap进行活跃用户统计 本文提供基于Sort Set进行活跃用户统计的PHP版本: https://github.com/billfeller/billfeller.github.io/blob/master/code/UserTj.php

用Redis bitmap统计活跃用户、留存

用Redis bitmap统计活跃用户.留存 Spool的开发者博客,描述了Spool利用Redis的bitmaps相关的操作,进行网站活跃用户统计工作. 原文:http://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/ Redis支持对String类型的value进行基于二进制位的置位操作.通过将一个用户的id对应value上的一位,通过对活跃用户对应的位进行置位,就能够用一个value

redis 用setbit(bitmap)统计活跃用户

getspool.com的重要统计数据是实时计算的.Redis的bitmap让我们可以实时的进行类似的统计,并且极其节省空间.在模拟1亿2千8百万用户的模拟环境下,在一台MacBookPro上,典型的统计如“日用户数”(dailyunique users) 的时间消耗小于50ms, 占用16MB内存.Spool现在还没有1亿2千8百万用户,但是我们的方案可以应对这样的规模.我们想分享这是如何做到的,也许能帮到其它创业公司. Bitmap以及Redis Bitmaps快速入门(Crash Cour

位图法统计活跃用户

Setbit 的实际应用 场景: 1亿个用户, 每个用户 登陆/做任意操作 ,记为 今天活跃,否则记为不活跃 每周评出: 有奖活跃用户: 连续7天活动每月评,等等... 思路: Userid dt active1 2013-07-27 11 2013-0726 1 如果是放在表中, 1:表急剧增大,2:要用group ,sum运算,计算较慢 用: 位图法 bit-mapLog0721: '011001...............0' ......log0726 : '011001.......

支撑5亿用户、1.5亿活跃用户的Twitter最新架构详解及相关实现

如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 摘要:Twitter出道之初只是个奋斗在RoR上的小站点,而如今已拥有1.5亿的活跃用户,系统日传输tweet更多达4亿条,并已完成了以服务为核心的系统架构蜕变. Twitter如今在世界范围内已拥有1.5亿的活跃用户,为了给用户生成timeline(时间轴)需支撑30万QPS,其firehose每秒同样生成22MB数据.整个系统每天传输tweet 4亿条,并且只需要5分钟就可以让一条twe

日活跃用户统计函数

题记: 在做运营统计的时候,一个最常见的指标是日活跃用户数(DAU),它的一般性概念为当日所有用户的去重,但是在大部分情况下,我们获取到的数据中会有登录用户与有匿名用户,而这部分用户是会出现重叠的.常规的做法是利用cookie或者imei(移动端)进行自关联,然后算出有多少用户同时是登录用户和匿名用户,最终的 日活跃用户数 = 登录用户+匿名用户-匿名转登录用户. 在实际操作中需要写复杂的HQL才能完成这部分工作,而且运行效率低下,为此需要开发一个UDAF函数进行处理. 首先说明一下函数的原理:

活跃用户数量偏少?让我们从代码上分析一下原因!

最近有网友发现友盟的数据统计里面,活跃用户的数量有点不大对劲,跟启动次数相比,严重偏少.sdk的使用方式没啥好说的,就那么简单几步,应该不会是sdk设置的问题.于是就从友盟关于活跃用户的定义开始,着手分析这个问题. 活跃用户的定义:打开应用的用户即为活跃用户,不考虑用户的使用情况. 从上面的文章,了解到Umeng里面对用户的定义:友盟将一个独立的设备视为一个用户,然而每个独立的用户是通过UMID来进行唯一标识的.然而UMID又是神马鬼东西?简单来说就是友盟会在第一次安装的时候生成一个UMID,当

通向高可扩展性之路(推特篇) ---- 一个推特用来支撑1亿5千万活跃用户、30万QPS、22MB每秒Firehose、以及5秒内推送信息的架构

原文链接:http://highscalability.com/blog/2013/7/8/the-architecture-twitter-uses-to-deal-with-150m-active-users.html 写于2013年7月8日,译文如下: “可以解决推特所面临的挑战”的玩具般的方案是一个常用在扩展性上的比喻.每个人都觉得推特很容易实现.稍微具备一些系统架构的知识我们就可以构建一个推特,就这么简单.但是根据推特软件开发部门的VP Raffi Krikorian在 Timelin

5.2亿活跃用户“不活跃”?有点山寨的美图电商尴尬了

前不久,美图正式上线了独立的电商平台--"美铺". 根据美图公布的信息,美铺被定义为一个时尚分享购物社区.有别于传统的B2C或C2C模式,美铺采取的是B2C2C的买手模式,即通过包括买手.网红.KOL在内的时尚达人来连接品牌商和消费者. 文/张书乐(TMT行业观察者.游戏产业时评人,人民网.人民邮电报专栏作者) 刊载于<计算机应用文摘>2017年5月上旬刊 然而,这并没有多少新鲜感.或者说,这不过是微商式的KOL版. 亦步亦趋学网易?这个可能有 把潮自拍的定制功能单拿了出来