需求:现在我有一个需求,需要实时获得订单信息,允许误差;
数据来源:两个不同的第三方平台;
思路:定时任务,获得订单数据,存储进redis缓存中;
问题:不想每次都覆盖缓存,想先判断再覆盖,如何设置;
当前的代码:
// 第三方接口-来源1
JSONObject qhlOrders = threeQHLService.getOrderList(orderDto);
String qhltotal = qhlOrders.getString("total");
JSONArray qhlArray = qhlOrders.getJSONArray("data");
List<OrderInfo> qhlOrderInfos = JSONArray.parseArray(qhlArray.toJSONString(), OrderInfo.class);
//第三方接口-来源2
JSONObject acOrders = threeACService.getOrders(orderDto);
String actotal = acOrders.getString("total");
JSONArray acArray = acOrders.getJSONArray("data");
List<OrderInfo> acOrderInfos = JSONArray.parseArray(acArray.toJSONString(), OrderInfo.class);
// 合并数据,排序,截取
ArrayList<OrderInfo> orderInfos = new ArrayList<>();
orderInfos.addAll(qhlOrderInfos);
orderInfos.addAll(acOrderInfos);
orderInfos.sort(Comparator.comparing(OrderInfo::getTimeCreate).reversed()); // 按照时间降序
orderInfos.subList(0,49);// 截取
// 问题:如何判断是否需要更新缓存
System.out.println("===========");
就是把最新的订单数据往前面放,最多显示50条数据,保持最新的在最前面
能详细描述下,判断是否需要更新,判断的依据是什么,是数据改变了 比如从订单 1,2,3变成了4,5,6?还是订单状态或者其他内部属性改变了?
就是把最新的订单数据往前面放,最多显示50条数据,保持最新的在最前面
@lanto_liang: 如果订单状态不改变,就很简单啊,你每次放数据的时候也在redis存一下最新的订单时间是多少,下次来了,判断下最新的时间有没有变化,就能判断出是否要覆盖之前的缓存了。如果是订单内容和状态会变化这种就比较麻烦,需要你转换成json串后,通过MD5或者其他手段生成一段身份编码存在redis里面如果下次来数据了,再次计算一个身份串码,比较是否相等,如果不相等就更新。个人看法,仅供参考
@Raiden_xin: 谢谢!
@Raiden_xin: 已关注大佬
看起来像是业务问题,不是技术问题
– 会长 2年前