Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如何避免电商秒杀中出现的超卖超买现象 #1

Open
chenqingspring opened this issue Nov 14, 2017 · 0 comments
Open

如何避免电商秒杀中出现的超卖超买现象 #1

chenqingspring opened this issue Nov 14, 2017 · 0 comments

Comments

@chenqingspring
Copy link
Owner

chenqingspring commented Nov 14, 2017

问题场景

电商秒杀活动,本来库存是100件,但是由于并发请求导致商品卖了120件。

搜索中文关键词:电商 超买 超卖

搜索英文关键词:concurrency in e-commerce

总结如下

谁先支付成功,算谁抢到

  • 最终发起支付
  • 抢单数量 - 1
    • 乐观锁,读数量之前检查表的版本号,更新的时候where这个版本号,并更新版本号和数量(-1)
    • 悲观锁,在当前事务完成之前,其他任何事务不能修改当前事务读的数量
  • 调用支付API
  • 支付成功 不变
  • 支付失败 抢单数量 + 1
    • 乐观锁
    • 悲观锁

谁先下单算谁抢到,预留支付时间(5分钟)

  • 发起下单请求
  • 查询抢单数量
  • 更新抢单数量 - 1
    • 乐观锁
    • 悲观锁
  • 订单创建
  • 5分钟后执行定时任务
    • 检查支付时间是否过期
    • 并更新抢单数量

用Redis缓解并发

  • 在并发量较小时,redis可以有效的减少相关的延时
  • 在高并发时,可以利用redis中基于cas的乐观锁
@chenqingspring chenqingspring changed the title 如何避免电商秒杀中出现的超卖超买 如何避免电商秒杀中出现的超卖超买现象 Nov 15, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant