0

现在我们的商城是把所有用户需要卖的商品低价集中在某个时间段,在某个时间段给其他人秒杀。
问题是在秒杀过程中,买家需要扣掉钱,卖家加上钱,还要加买家卖家的log,还需计算平台佣金。
在这个并发过程中,一个订单同时update两次,还要insert两次,计算等等!
有什么方法可以减少sql的操作?

Mr_s 24
2019-09-12 提问
3 个回答
0

可以尝试把流程分开。一些计算和非必要结果用队列逐个去处理减少等待时间。
就拿你上面这个秒杀来说,可以直接在买家扣钱成功之后就返回已下单完成,相应商品库存锁定。之前的计算佣金和打钱给卖家这种可以不用及时性的去处理(PS:除非你们业务必须要各环节及时性)。在处理卖家收钱和佣金可以加上回滚,当流程没成功,直接把钱退给客户。
个人想法,仅供参考。

0

合理使用 缓存 进行 削峰 。比如将你描述的过程分为两个步骤: 生成订单 + 买卖双方金额处理和日志处理,在订单生成后将待处理订单放入Redis队列,另启一个进程进行队列任务处理,依次取出待处理订单进行后续业务处理。另:后续业务处理时注意要开启事务,买卖双方的金额变动和日志是一个原子操作,必须一次性完整执行,出现异常则需要整体回滚。

0

技术问题,有时候可以通过业务上的调整得以优化。

撰写答案

推广链接