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
posted @ 2020-12-15 20:15  介寒食  阅读(1110)  评论(0编辑  收藏  举报