• 读写分离-延时问题-1


    代码主要逻辑如下:

     1 public void createCoupons(ReqCreateAndBindCouponDTO request) {
     2         // 1.创建优惠券组及多张优惠券(写库)
     3         int groupId = createCouponGroupAndCoupons(request);
     4         // 2.根据券组ID获取生成的优惠券(读库)
     5         List<CouponDTO> resCoupons = couponService.selectCoupon(groupId);
     6         if (resCoupons == null || resCoupons.size() == 0) {
     7             throw new RuntimeException("查询优惠券失败,groupId=" + groupId);
     8         }
     9        // 3.返回
    10         return resCoupons;
    11     }

    业务逻辑:需要创建一组优惠券,(一个优惠券组下可以有多张优惠券),创建优惠券后,根据优惠券组ID查询出其下的优惠券,将券号返回!本着读写分离模式,修改数据库表操作在写库,查询数据操作在读库,所以步骤一应该是写库,步骤二应该是读库

    问题:在实际操作中会发现,执行第二步的时候经常会抛出如代码第7行的异常

    分析:读写分离采用了主从复制,当写库有修改操作时,会记录在binlog日志中,完了从库会同步binlog日志中的信息,进而保持跟主库数据一致,但主库修改到从库同步完成,是需要时间的而代码在执行第完第3行,会立即执行第5行即查询操作,而此时,从库的同步可能并为完成,所以就会造成查询的resCoupons 为空。

    解决办法:在应对此类问题时最简单的办法就是将步骤二的查询操作改为写库,即从主库查询数据,此时就避免了由于主从延时问题导致从库来不及同步的问题!额,虽然说查询操作应该从从库查询,但总得保证功能不会出错吧,然后再考虑性能问题

  • 相关阅读:
    Java 嵌套循环之九九乘法表
    Java switch语句第二种用法
    Java switch语句
    Java if-else if-else多选择结构代码
    Java if else双选择结构之计算圆的面积和周长
    Java if单选择结构---掷色子游戏
    在webstorm11中使用nodejs库的智能提示功能
    Node.JS 学习路线图
    Nodejs系列课程,从入门到进阶帮你打通全栈
    使用supervisor提高nodejs调试效率
  • 原文地址:https://www.cnblogs.com/chinano1/p/9308054.html
Copyright © 2020-2023  润新知