提问人:Muhammad Adnan 提问时间:11/13/2023 更新时间:11/13/2023 访问量:42
如何处理mysql laravel中库存读取和更新的竞争条件?[复制]
How to handle race condition in stock reading and updating in mysql laravel? [duplicate]
问:
我正在开发一个软件,其中多个销售订单来自 excel 文件。我的问题是销售订单的多个 csv 文件上传到我的系统。系统在作业中解析这些文件。如果所有文件都有相同产品的订单,即 PRODUCTA,则所有订单同时读取剩余库存。比方说,它是 20。3个订单来了,第一个需要8个数量,第二个需要5个数量,第三个需要15个数量。现在发生的事情非常感兴趣。这三个人同时读取剩余库存,它是 20。所有三个请求都可以看到库存为 20,每个请求都获取其库存并根据其数字更新剩余库存。例如,第一个将重新分配的库存更新为 12,第二个 1 个 15 个,第三个 1 个 5。实际上,它应该是 -8。我已经处理了没有库存,但现在忽略该部分,专注于我现在面临的问题。任何帮助或建议将不胜感激。谢谢
答:
-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
编辑:根据您的系统的简单程度,互斥锁也可能是矫枉过正,数据库事务足以使事情原子化,足以满足您的需求。
评论