SpringBoot中使用Redis的zset统计用户在线信息

SpringBoot中使用Redis的zset统计用户在线信息


统计在线用户的数量,是应用很常见的需求了。如果需要精准的统计到用户是在线,离线状态,我想只有客户端和服务器通过保持一个TCP长连接来实现。如果应用本身并非一个IM应用的话,这种方式成本极高。

现在的应用都趋向于使用心跳包来标识用户是否在线。用户登录后,每隔一段时间,往服务器推送一个消息,表示当前用户在线。服务器则可以定义一个时间差,例如:3分钟内收到过客户端心跳消息,视为在线用户,

客户端每隔3分钟发送一个心跳到服务器,服务器根据会话获取到用户的ID,作为zsetmember
存入zsetscore便是当前收到心跳的时间戳,当同一个用户第二次发送心跳的时候,就会更新他对应的score值,由于更新是在内存,这个速度相当快。

zSet统计在线用户的实现

1.编写统计在线人数接口(这里写的是一个直播的在线有效观看人数)


    Integer getPeopleSum(Integer type,Integer liveId,String uid);

2.线人数接口的实现

   
    @Override
    public Integer getPeopleSum(Integer type,Integer liveId,String uid) {
        String genre;
        if (type==ONE){
            genre="";
        }else {
            genre="";
        }
        Calendar calendar = Calendar.getInstance();
        long time = calendar.getTimeInMillis();
        Calendar beforeTime = Calendar.getInstance();
        beforeTime.add(Calendar.MINUTE, -3);// 3分钟之前的时间戳
        long time1 = beforeTime.getTimeInMillis();
        redisClient.zAdd(key,uid, time);
        //获取一定时间内,在线的用户数量
        long count =  redisClient.zCount(key,time1,time);
        return count ;
    }

3.comtroller

  
    @ApiOperation("")
    @PostMapping("")
    public ResultVo getPeopleSum( Integer type,
                                 Integer liveId,
                                 HttpServletRequest request){
        String uid = getTokenUid(request);
        return ResultVoUtil.success(wxLiveService.getPeopleSum(type,liveId,uid));
    }

一个简单的直播在线有效用户数统计就完成啦

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值