做的比较唯美的网站,企业网站功能列表,怎样开网店详细教程,php企业门户网站模板1.场景 遇到了一个场景#xff0c;在客户给我们推送的数据中#xff0c;咋1分钟左右#xff0c;会有相同车辆vehicle 和时间 gpstime一样的数据#xff0c;这类数据呢#xff0c;我们认为是重复数据#xff0c;需要过滤的 把相同 vehicle 和 gpstime 作为key存入到redis中…1.场景 遇到了一个场景在客户给我们推送的数据中咋1分钟左右会有相同车辆vehicle 和时间 gpstime一样的数据这类数据呢我们认为是重复数据需要过滤的 把相同 vehicle 和 gpstime 作为key存入到redis中过期时间为1分钟当推送过来数据时查询一下redis中是否有值有则过滤 推送过来的数据呢是批量所以我们要批量获取key的操作在这儿记录下操作过程 2.引入注解Resource
Resourceprivate RedissonClient redissonClient;3.引入redisson的依赖
!--redisson--dependencygroupIdorg.redisson/groupIdartifactIdredisson-spring-boot-starter/artifactIdversion3.14.1/version/dependency4.推送的数据格式是json数组 JSONArray params MapString, RFutureObject 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);}});标记哪些是新增数据那些是更新已经存在的数据 key对应的value给个1就行了数据量小不占内存 MapString, Object addDataMap new HashMap();MapString, 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 里面是需要过滤的数据
}});学会使用redis的管道模式来批量处理key了吗