如何在 mysql laravel 中处理股票读取和更新中的竞争条件?

问题描述 投票:0回答:1

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

php mysql laravel race-condition
1个回答
0
投票

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

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

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

...这是一个流行的 PHP 实现:

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

编辑:根据您的系统的简单程度,互斥体也可能太过分了,数据库事务足以使事情原子化以满足您的需求。

© www.soinside.com 2019 - 2024. All rights reserved.