0
点赞
收藏
分享

微信扫一扫

使用RedissonClient的管道模式批量查询key

登高且赋 2024-06-09 阅读 9
redis

1.场景

2.引入注解@Resource

@Resource
    private RedissonClient redissonClient;

3.引入redisson的依赖

<!--redisson-->
        <dependency>
            <groupId>org.redisson</groupId>
            <artifactId>redisson-spring-boot-starter</artifactId>
            <version>3.14.1</version>
        </dependency>

4.推送的数据格式是json数组

Map<String, RFuture<Object>> objectObject = new HashMap<>();
            params.forEach(json -> {
                try {
                    JSONObject jsonObjectBean = JSON.parseObject(JSON.toJSONString(json));
                    String gpsTime = jsonObjectBean.getString("lastDeviceTime");
                    String vehicleNo = jsonObjectBean.getString("vehicleNo");
                    String redisKey = "gps:mita:vehicle:gpstime:" + vehicleNo + ":" + gpsTime;
                    objectObject.put(redisKey, redissonClient.getBucket(redisKey).getAsync());
                } catch (Exception e) {
                    log.error("mita推送单个车辆信息异常(redis操作)=", e);
                }
            });
Map<String, Object> addDataMap = new HashMap<>();
            Map<String, Object> updateDataMap = new HashMap<>();
            for (String key : objectObject.keySet()) {
                Object value = objectObject.get(key).get();
                if (value == null) {
                    // redis中不存在
                    addDataMap.put(key, "1");
                } else {
                    // redis中已存在
                    updateDataMap.put(key, value);
                }
            }
// 开启批处理
            RBatch batch = redissonClient.createBatch();
            for (String redisKey : addDataMap.keySet()) {
                batch.getBucket(redisKey).setAsync(addDataMap.get(redisKey), 1, TimeUnit.MINUTES);
            }
            for (String redisKey : updateDataMap.keySet()) {
                batch.getBucket(redisKey).expireAsync(1, TimeUnit.MINUTES);
            }
            // 执行批处理
            batch.execute();
params.forEach(json -> {
JSONObject jsonObjectBean = JSON.parseObject(JSON.toJSONString(json));
String vehicleNo = jsonObjectBean.getString("vehicleNo");
String gpsTime = jsonObjectBean.getString("lastDeviceTime");
                        String redisKey = "gps:mita:vehicle:gpstime:" + vehicleNo + ":" + gpsTime;
if ("1".equals(addDataMap.get(redisKey))){
// 这里面就是新增的数据了(需要的),updateDataMap 里面是需要过滤的数据
}
  });
举报

相关推荐

0 条评论