电商商城如何避免重复订单

  由于用户提交订单后,用户同时又可以再下相同的一单,这类不算为重复提交。规避的是一份订单重复提交两次。

  思路1:

    创建订单服务保证其幂等性后端添加订单号服务,在用户订单页面返回给页面唯一的订单号,在提交订单时传向后端订单号,

  同时数据库中订单表的订单号字段设置为唯一索引,若已提交,则抛出异常,从而避免的同一订单提交两次。

  思路1改进:

    订单号放在订单页面,如果用户恶意篡改,也会发生重复提交。

    这时,我们可以将生成的订单后同时放在redis一份,当请求进来时,校验订单号是否存在于redis,存在则提交,不存在则为不做处理。(redis分布式锁

  错误思路:

    提交前,查询当前订单是否存在过。但是如何区分出是否是同一个订单呢?倘若其他业务,我们可以区分出是否为同一个业务,

  先查询再根据查询结果来判断是否重复,这样还会有一个问题:查询和后续的插入操作不是原子性的,在数据库发生脏读的情况下,

  即使查询出未有提交,在并发的情况下,也会重复提交。

 

即使使用唯一订单号,也需要在订单表中设置自增主键。当使用订单号做主键时,由于订单号是不规则的,当数据量大时会产生页分裂,从而产生性能问题

 

posted @ 2020-06-26 12:23  以梦为码  阅读(1352)  评论(0编辑  收藏  举报