开发者社区> 问答> 正文

在费控系统和库存系统里,两人同时发起领取会导致库存为负数怎么解决

比如一个库存为10,两个人同时发起领用,每个人领用6个,这时候两人都可以提交成功,但是最好系统会扣减12,导致库存变成-2

展开
收起
挚爱蛋炒饭 2023-12-07 11:22:38 98 0
来自:钉钉宜搭
3 条回答
写回答
取消 提交回答
  • 为了解决多人同时领用导致库存为负数的问题,你需要实现并发控制和事务处理。一种常见的方法是使用数据库中的锁或者乐观锁机制。以下是基本的步骤:

    • 当用户发起领用请求时,先查询当前库存数量。
    • 检查库存是否足够,如果不足,则拒绝请求。
    • 如果库存足够,更新库存,并确保更新操作在一个事务中执行,以避免数据不一致。
    2023-12-07 15:36:55
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    这种情况被称为并发问题,可以通过数据库事务来解决。在提交领用请求之前,先锁定库存,然后检查库存是否足够。如果库存足够,就扣减库存并提交请求;否则,就回滚事务,拒绝请求。这样可以保证数据的一致性和完整性。

    2023-12-07 13:10:21
    赞同 展开评论 打赏
  • CSDN全栈领域优质创作者,万粉博主;InfoQ签约博主;华为云享专家;华为Iot专家;亚马逊人工智能自动驾驶(大众组)吉尼斯世界纪录获得者

    在费控系统和库存系统中,当两人或多个操作者同时发起领取操作时,可能会导致库存为负数。这种情况是并发处理中的一个常见问题。负库存是指在实际销售出库的数量大于系统有效账面库存数量的情况。为了解决这一问题,可以考虑以下方案:

    1. 事务控制: 使用数据库的事务管理功能,确保在同一时间只有一个操作可以更新库存。这意味着,当一个操作进行库存更新时,其他操作必须等待,直到第一个操作完成。这可以通过使用锁来实现,如InnoDB支持的特定语句进行显示加锁:select...lock in share modeselect...for update等。

    2. 队列系统: 引入消息队列或其他队列系统,使得所有的领取请求首先进入队列,然后由一个工作进程逐个处理,确保每次只有一个领取请求被实际处理。

    3. 库存预警机制: 当库存临近耗尽时,系统自动发出预警,要求用户确认或选择其他操作。这样可以避免因为并发问题导致的库存异常。

    4. 负库存处理策略: 考虑实际业务场景,当库存为负数时,是否有合适的补救措施或者成本计算模型来处理这种情况。例如,可以使用默认物料价格来计算移动平均值。

    5. 后台审核: 对于关键的库存变动操作,引入后台审核机制。只有经过审核的操作才会被真正执行,从而避免因为误操作或并发问题导致的库存异常。

    6. 优化数据库设计: 根据业务需求和并发情况,对数据库进行合理的设计和分区,以提高并发处理能力。

    2023-12-07 13:07:11
    赞同 展开评论 打赏
问答分类:
问答地址:
关联地址:
来源圈子
更多
收录在圈子:
+ 订阅
「宜搭」是云钉原生低代码平台(钉钉 PaaS - aPaaS),让企业应用搭建更简单! 帮助中小企业降本提效,加强组织的数字化自主权; 帮助大型企业释放个体创新力,助力组织创新涌现。
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载