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 里面是需要过滤的数据
}
});