Springboot整合redis:bitmaps用法
1、统计当前登录用户数 2、统计近五分钟的在线设备数量
@Autowired private StringRedisTemplate stringRedisTemplate;
/**
* 设置bitmaps,统计在线设备数
*
* @param deviceId
*/
private void setBitmaps(String key, Long deviceId) {
try {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
//获取当前时间
String curDate = formatter.format(new Date(System.currentTimeMillis()));
stringRedisTemplate.opsForValue().setBit(key + curDate, deviceId, true);
} catch (Exception e) {
log.error("setBitmaps,deviceId is {}, exception is {}", deviceId, e);
}
}
/**
* 统计近五分钟在线数
*/
public void getOnlineCount() {
try {
String key = "aiot:towercrane:device:online:";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
//获取当前时间
String curDate = key + formatter.format(new Date(System.currentTimeMillis()));
String curDateBeforeOne = key + formatter.format(new Date(System.currentTimeMillis() - 1 * 60 * 1000L));
String curDateBeforeTwo = key + formatter.format(new Date(System.currentTimeMillis() - 2 * 60 * 1000L));
String curDateBeforeThree = key + formatter.format(new Date(System.currentTimeMillis() - 3 * 60 * 1000L));
String curDateBeforeFour = key + formatter.format(new Date(System.currentTimeMillis() - 4 * 60 * 1000L));
long count = (long) stringRedisTemplate.execute((RedisCallback<Long>) con -> con.bitOp(RedisStringCommands.BitOperation.AND, curDate.getBytes(), curDateBeforeOne.getBytes(), curDateBeforeTwo.getBytes(), curDateBeforeThree.getBytes(), curDateBeforeFour.getBytes()));
System.out.println(count);
} catch (Exception e) {
log.error("getAttendanceOnlineCount exception is {}", e);
}
}
获取今日的统计数据
public ResponseEntity getCountDay(Long projectId) {
try {
String formatDate = DateUtil.formatDate(new Date());
String onlineLabourDayKey = Constants.LABOUR_DAY_KEY + formatDate + ":" + projectId;
Long labourDayCount = stringRedisTemplate.execute((RedisCallback<Long>) con -> con.bitCount(onlineLabourDayKey.getBytes()));
String onlineAdminDayKey = Constants.ADMIN_DAY_KEY + formatDate + ":" + projectId;
Long adminDayCount = stringRedisTemplate.execute((RedisCallback<Long>) con -> con.bitCount(onlineAdminDayKey.getBytes()));
Map<String, Object> map = new HashMap<>();
map.put("labourDayCount", labourDayCount);
map.put("adminDayCount", adminDayCount);
map.put("sum", labourDayCount + adminDayCount);
return ResponseEntityWrapper.success(map);
} catch (Exception e) {
log.error("getCountDay exception is {}", e);
return ResponseEntity.error(HttpStatus.ERROR, "服务器内部错误");
}
}
stringRedisTemplate

浙公网安备 33010602011771号