mysql update 库存问题

2016-02-01 22:33:51 +08:00
 sheldondai

Mysql 5.6
最近在做一些类似秒杀的业务场景,遇到了库存问题,按我之前的做法我们都没有直接使用 mysql 的update -1操作,因为担心超卖,但是一位同事说只要把需要 update 的字段设为无符号型就可以解决超卖的问题,我试了下,确实如此。但这里的疑惑是网上所以的文章都是 mysql 在高并发 update -1 的情况下会超卖。
比如这篇 http://www.cnblogs.com/billyxp/p/3701124.html 里面写到

II : 其次,超卖的根结在于减库存操作是一个事务操作,需要先 select ,然后 insert ,最后 update -1 。最后这个-1 操作是不能出现负数的,但是当多用户在有库存的情况下并发操作,出现负数这是无法避.免的。

6864 次点击
所在节点    MySQL
25 条回复
ugg
2016-02-02 11:27:50 +08:00
redis INCRBY + mysql update - 1 where > 0
skydiver
2016-02-02 13:03:12 +08:00
@sheldondai 重点不是有没有这种情况,重点是解决问题的思路太奇葩……
brucefeng
2016-02-02 13:21:03 +08:00
秒杀系统的高峰 QPS 是多少,期望解决问题的成本有多高(比如开发量多大能接受)。

如果没有这两个限制条件,讨论下去没有最优解,因为很多 NB 的技术太复杂,实现成本比较高。
zacard
2016-02-02 16:37:38 +08:00
先经过 redis 原子操作下
xiaoyong
2016-10-22 17:22:54 +08:00
这个问题与我正要解决的问题相同,正准备试试 @realpg 的方法。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/254887

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX