mysql 减库存_秒杀场景下mysql减库存逻辑优化

【问题背景】

某天早上做活动,流量大量增长,导致大量更新库存操作失败。

操作mysql返回的错误均为“Lost Connection to mysql server”,即mysql服务端主动断开了连接,导致update操作失败。

都是在sql执行过程中返回的“Lost”,且都是update操作返回“Lost”,同一时刻的“select”操作并无异常。

都是update执行操过了1s后返回的“Lost”

【原因】

秒杀情景下是大量update同时操作同一表的同一记录

对同一记录的写操作都要加“行锁”,且有“死锁检测”,使得sql操作串行执行,有阻塞

猜测:某些请求由于等到超时了,被mysql服务关了连接

【老流程】

如果需要更新 item1(分库1)、item2(分库2)、item3(分库4)的库存

流程

=>所有分库,每个分库上均开启一个事务

=>查询。。

=>循环处理3个item

=>=>如果该次操作以前没做过(没有对应)继续;否则处理下一个item

=>=>更新库存

=>=>更新是否售空

=>=>插入

=>所有分库,每个分库均提交事务

1)如果有一个item更新失败,回滚所有事务

2)尽量保证要不所有item都更新成功,要不都失败

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值