读写分离-延时问题-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行的异常spa

 

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

 

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

相关文章
相关标签/搜索