并发扣减商品库存,避免数据库更新,导致行锁?

rabbitgg 发布于 2016/09/03 22:13
阅读 1K+
收藏 0
同一个商品,商品表分表,同一个商品的库存扣减,直接SQL更新扣减,会导致并发行锁。怎么避免?使用分布式锁?还是有什么方案?
加载中
0
sunnysky
sunnysky

引用来自“sunnysky”的评论

可以在数据库加一个版本号,每次update时保证版本号是最新的即可,否则继续查询,直到取到最新版本号才更新。

引用来自“io2038”的评论

就是担心行锁,事务未提交时,肯定会锁住。
行锁就行锁呗,不死锁就行了。能保证最终数据一致性就行了。
0
宏哥
宏哥

首先,你得去除mysql


ked
ked
说的好像某p能解决行锁问题一样
0
eechen
eechen
从阿里和小米的电商经验可以看出,在大规模并发秒杀/抢购商品的的时候,如果直接连MySQL进行UPDATE库存,数据库会撑不住,阿里的方法是优化MySQL(AliSQL即将开源),小米的方法是先用PHP+Redis处理。
0
sunnysky
sunnysky
可以在数据库加一个版本号,每次update时保证版本号是最新的即可,否则继续查询,直到取到最新版本号才更新。
0
rabbitgg
rabbitgg

引用来自“sunnysky”的评论

可以在数据库加一个版本号,每次update时保证版本号是最新的即可,否则继续查询,直到取到最新版本号才更新。
就是担心行锁,事务未提交时,肯定会锁住。
0
rabbitgg
rabbitgg

引用来自“eechen”的评论

从阿里和小米的电商经验可以看出,在大规模并发秒杀/抢购商品的的时候,如果直接连MySQL进行UPDATE库存,数据库会撑不住,阿里的方法是优化MySQL(AliSQL即将开源),小米的方法是先用PHP+Redis处理。
用Redis处理会有很多数据要走缓存吧,也是会有锁,要加队列?
0
ked
ked
像库存这么细的颗粒度,要保持数据一致性,必定是要锁的。就看你在哪锁。建议把数量放到redis里,利用red is
0
rabbitgg
rabbitgg

引用来自“sunnysky”的评论

可以在数据库加一个版本号,每次update时保证版本号是最新的即可,否则继续查询,直到取到最新版本号才更新。

引用来自“io2038”的评论

就是担心行锁,事务未提交时,肯定会锁住。

引用来自“sunnysky”的评论

行锁就行锁呗,不死锁就行了。能保证最终数据一致性就行了。
发生行锁,返回让重试?
返回顶部
顶部