php redis统计在线人数,每天活跃度

30 篇文章 0 订阅

1.项目中使用的是每5分钟向接口发包,激活用户。

 //用户在线激活
    public function user_activate(){
        $code = $this->param['code'];
        $redis =  new \myredis\Datasource();
        $myredis = $redis::getRedis('instance1');
        if(!$myredis->hexists('code',$code)) $this->getBackTo('请重新登录',1,'');
        $userid = json_decode($myredis->hget('code',$code),true);
        $userid = $userid['userid'];
        $myredis->zadd('online',time(),$userid);
        $this->getBackTo('激活成功',0);
    }

查询redis里online集合中5分钟之内的数据

//统计在线人数
   public function online_sum(){  //根据时间统计
        $expire = isset($this->param['expire'])?$this->param['expire']:300;
       $redis = new \myredis\Datasource();
       $myredis = $redis::getRedis('instance1');
       $data = $myredis -> zcount('online',time()-$expire,time());//统计时间段内的人数
       $data = $data?$data:0;
       $this->getBackTo('获取成功',0,$data);
   }

2.统计活跃度
第一步数据准备

		$cache = "active:2019-03-01";
		$userid = 102035;
       $redis = new \myredis\Datasource();
       $myredis = $redis::getRedis('instance1');
       $myredis->setbit($cache,$userid,1);  //将用户id以二进制方式存入redis,性能更好
       

接着拿取redis数据

//查询最近$nums天的日期
     public static function get_weeks($time = '',$nums=7, $format='Y-m-d'){
        $time = $time != '' ? $time : time();
        //组合数据
        $date = [];
        for ($i=1; $i<=$nums; $i++){
            $date[$i] = 'active:'.date($format ,strtotime( '+' . $i-$nums .' days', $time));
        }
        return $date;
    }
    
 //查询最近七天的活跃度
    public function get_activebydays(){
       $days = isset($this->param['days'])?intval($this->param['days']):7;
        $redis = new \myredis\Datasource();
        $myredis = $redis::getRedis('instance1');
        $res = self::get_weeks(time(),$days); //最近7天
        $nums = 0;
        foreach ($res as $k=>$v){
            $nums += $myredis->bitcount($v); //查询每天的数量,累加
        }
        $this->getBackTo('获取成功',0,$nums);
    }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值