在线用户数量统计,使用redis

/ 后端 / 没有评论 / 341浏览

1. 使用 dbsize (对于在线统计数量更加精准)

(1)用户每次访问,针对某个库进行set操作,并设置短的过期时间; (2)每次统计在线人数,使用dbsize进行统计,避免keys(使用scan进行替换)造成的性能影响;

2. 使用 bitcount (针对于存在上下线的业务,并且大量数据占用内存低)

(1)用户上线,针对用户366652,使用setbit onlineCount 366652 1,此时bitcount onlineCount返回1 (2)用户下线,则使用 setbit onlineCount 366652 0,此时bitcount onlineCount返回0

3.使用字符串加集合类型,配合监听key过期(用于统计在线看视频人数等)

(1)当用户首次进入观看视频,以及后续每隔一段时间上传时长时,进行集合及字符串添加

# 插入字符串,设置过期60秒时间
set video_1 123 EX 60
# 插入集合 
sadd video_1 123

(2)设置监听过期key,当监听到过期key时,进行删除集合中元素信息

//简单断线重连  
while (true){ 
        try{
            Jedis jedis = new Jedis("59.110.162.53", 6380);
            jedis.auth("dyxly2021+");

            jedis.select(15);
            JedisPubSub pubSub = new JedisPubSub() {
                @Override
                public void onPMessage(String pattern, String channel, String message) {
                    //进行删除集合元素操作
                }
            };

            jedis.psubscribe(pubSub,"__key*__:expired"); 
        catch(Exception e){}
        }
 srem video_1 123

(3)每次统计某个视频的在线观看人数时,使用命令统计集合个数

 scard video_1