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
本文由 GY 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2023/03/16 09:33