首页 新闻 会员 周边 捐助

实时数据查询的实现,如何减少redis的写次数

0
悬赏园豆:10 [待解决问题]

需求:现在我有一个需求,需要实时获得订单信息,允许误差;
数据来源:两个不同的第三方平台;
思路:定时任务,获得订单数据,存储进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条数据,保持最新的在最前面

lanto_liang的主页 lanto_liang | 初学一级 | 园豆:8
提问于:2022-05-06 17:53

看起来像是业务问题,不是技术问题

会长 2年前
< >
分享
所有回答(1)
0

能详细描述下,判断是否需要更新,判断的依据是什么,是数据改变了 比如从订单 1,2,3变成了4,5,6?还是订单状态或者其他内部属性改变了?

Raiden_xin | 园豆:273 (菜鸟二级) | 2022-05-06 21:53

就是把最新的订单数据往前面放,最多显示50条数据,保持最新的在最前面

支持(0) 反对(0) lanto_liang | 园豆:8 (初学一级) | 2022-05-07 09:15

@lanto_liang: 如果订单状态不改变,就很简单啊,你每次放数据的时候也在redis存一下最新的订单时间是多少,下次来了,判断下最新的时间有没有变化,就能判断出是否要覆盖之前的缓存了。如果是订单内容和状态会变化这种就比较麻烦,需要你转换成json串后,通过MD5或者其他手段生成一段身份编码存在redis里面如果下次来数据了,再次计算一个身份串码,比较是否相等,如果不相等就更新。个人看法,仅供参考

支持(0) 反对(0) Raiden_xin | 园豆:273 (菜鸟二级) | 2022-05-07 09:33

@Raiden_xin: 谢谢!

支持(0) 反对(0) lanto_liang | 园豆:8 (初学一级) | 2022-05-07 11:57

@Raiden_xin: 已关注大佬

支持(0) 反对(0) lanto_liang | 园豆:8 (初学一级) | 2022-05-07 11:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册