赞
踩
我的项目有个显示用户的遗忘曲线,需要统计在线用户以计算他们的曲线
@Override
public void markUserActive(int userId) {
String key = "active_users:" + LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
redisUtils.setBit(key, userId, true);
// 设置2小时的过期时间
redisUtils.expire(key, 2, TimeUnit.HOURS);
}
markUserActive(int userId) 方法: 这个方法用于标记一个用户为活跃状态。它接收一个用户ID作为参数。方法首先构造一个键,键的格式是 “active_users:” 加上当前的日期和时间。然后,它在 Redis 数据库中将这个键对应的位(由用户ID指定)设置为 true,表示该用户是活跃的。最后,它设置这个键的过期时间为2小时。这意味着,如果2小时内没有再次标记该用户为活跃,那么这个键就会从 Redis 数据库中删除。
@Override
public List<Integer> getActiveUserIds() {
List<Integer> activeUserIds = new ArrayList<>();
// 当前时间
LocalDateTime currentTime = LocalDateTime.now();
for (int i = 0; i < 2; i++) {
// 遍历过去2小时内的键
String key = "active_users:" + currentTime.minusHours(i).format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
if (redisUtils.hasKey(key)) {
// 遍历1000个用户
for (int j = 0; j < 1000; j++) {
Boolean isUserActive = redisUtils.getBit(key, j);
if (isUserActive != null && isUserActive) {
activeUserIds.add(j);
}
}
}
}
return activeUserIds;
}
String key = "active_users:" + LocalDateTime.now().truncatedTo(ChronoUnit.MINUTES).format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。