订单超卖问题是涉及到库存项目的重中之重,这里我总结一下常用的方法

1、简单处理【update & select 合并】(乐观锁)

beginTranse(开启事务)
$num = 1;
try{
$dbca->query('update s_store set amount = amount - $num where amount>=$num and postID = 12345');
}catch($e Exception){
rollBack(回滚)
}
commit(提交事务)

还有一种就是加版本号【先select 后 update】

$db->query('update s_store set amount = amount - $num,version = version+1 where version=$version and postID = 12345');

个人更推荐合并的那个

场景:适用于小型应用并发小

2、使用redis队列

点击这里查看具体代码

场景:大型应用高并发

总结:以上就是最常见的解决方案,当然也有其他的一些方式,看了后发现还是这两种更合适,以上两种方案足以解决正常的各种情况

05-04 12:11