如何处理mysql laravel中库存读取和更新的竞争条件?[复制]

How to handle race condition in stock reading and updating in mysql laravel? [duplicate]

提问人:Muhammad Adnan 提问时间:11/13/2023 更新时间:11/13/2023 访问量:42

问:

我正在开发一个软件,其中多个销售订单来自 excel 文件。我的问题是销售订单的多个 csv 文件上传到我的系统。系统在作业中解析这些文件。如果所有文件都有相同产品的订单,即 PRODUCTA,则所有订单同时读取剩余库存。比方说,它是 20。3个订单来了,第一个需要8个数量,第二个需要5个数量,第三个需要15个数量。现在发生的事情非常感兴趣。这三个人同时读取剩余库存,它是 20。所有三个请求都可以看到库存为 20,每个请求都获取其库存并根据其数字更新剩余库存。例如,第一个将重新分配的库存更新为 12,第二个 1 个 15 个,第三个 1 个 5。实际上,它应该是 -8。我已经处理了没有库存,但现在忽略该部分,专注于我现在面临的问题。任何帮助或建议将不胜感激。谢谢

php mysql laravel 争用条件

评论

0赞 Wilson Hauck 11/13/2023
你想解决什么问题?

答:

-1赞 Mayor of the Plattenbaus 11/13/2023 #1

我相信你要找的是一个互斥锁。互斥锁将允许您锁定应用程序的所有相关部分,直到您完成处理,然后释放这些部分。

以下是有关互斥锁设置的更多信息:

https://wpdesk.net/blog/mutexes-deadlocks-and-other-developer-nightmares/

...下面是一个流行的PHP实现:

https://symfony.com/doc/current/components/lock.html

编辑:根据您的系统的简单程度,互斥锁也可能是矫枉过正,数据库事务足以使事情原子化,足以满足您的需求。