统计一小时的在线用户的人数
controller代码
@Autowired
private FyStatisticsUtil fyStatisticsUtil;
@GetMapping("/getOnlineNum")
public RestResponse getOnlineNum(HttpServletRequest request) {
long end = System.currentTimeMillis();
long start = end-3600*1000;
Long num = fyStatisticsUtil.userOnlineCount(start,end);
return RestResponse.success().setData(num);
}
在网关过滤器中添加如下代码
if (user != null && user.getId() != null && user.getId() != 0) {
fyStatisticsUtil.userOnline(user.getId());
log.info("----添加在线用户---");
}
工具类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
@Component
public class FyRedisUtil {
@Autowired
private StringRedisTemplate redisTemplate;
public Boolean zsetSet(String key, Object value, long score){
try {
return redisTemplate.opsForZSet().add(key, String.valueOf(value), score);
}
catch (Exception e) {
e.printStackTrace();
return false;
}
}
public Long zsetSize(String key){
try {
return redisTemplate.opsForZSet().size(key);
}
catch (Exception e) {
e.printStackTrace();
return 0L;
}
}
public Long zsetCount(String key,double start,double end){
try {
return redisTemplate.opsForZSet().count(key,start,end);
}
catch (Exception e) {
e.printStackTrace();
return 0L;
}
}
public Long zsetRemove(String key,Long minScore,Long maxScore){
try {
return redisTemplate.opsForZSet().removeRangeByScore(key,minScore,maxScore);
}
catch (Exception e) {
e.printStackTrace();
return 0L;
}
}
}
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
@Component
public class FyStatisticsUtil {
private static final String ONLINE_USER = "online_user";
@Resource
private FyRedisUtil fyRedisUtil;
public void userOnline(Long userId) {
fyRedisUtil.zsetSet(ONLINE_USER, userId, System.currentTimeMillis());
}
public Long userOnlineSize() {
return fyRedisUtil.zsetSize(ONLINE_USER);
}
public Long userOnlineCount(double start,double end) {
return fyRedisUtil.zsetCount(ONLINE_USER,start,end);
}
public Long userOfflineClean(Long value) {
return fyRedisUtil.zsetRemove(ONLINE_USER,value);
}
}
退出登录
if (null != sessionUser){
fyStatisticsUtil.userOfflineClean(sessionUser.getId());
}