【问题标题】:Ensure that multiple requests are processed one after the other确保多个请求一个接一个地处理
【发布时间】:2017-04-12 15:59:13
【问题描述】:

解释实际发生的情况:

外部服务将带有 XML 数据的 HTTP POST 请求发送到 PHP 脚本。此脚本检查数据是否已存在于 MySQL 数据库中。如果没有,则插入一条新记录。

现在出现了第二项故障安全服务。它将完全相同的 XML 数据发送到 PHP 脚本。

问题:

脚本已经检查记录是否存在。但是请求几乎同时出现,并且脚本被并行调用。所以数据相同的两个请求的数据都被插入了。

我考虑过使用队列,但我想不出一个简单的方法来做到这一点。这整个过程其实很简单。

确保不插入数据两次的最简单方法是什么?

【问题讨论】:

  • 使用唯一键,以及插入语句的 INSERT ON DUPLICATE KEY UPDATE 形式。使用 http 请求,无法确保收到订单。
  • 使用事务。
  • 我认为事务不会改变任何东西,但唯一键会 - 我认为。我会尝试清理数据库并添加唯一键。

标签: php mysql queue


【解决方案1】:

为您的事务生成哈希,使其在数据库级别唯一。如果您尝试添加两次相同的数据,MySQL 会抛出异常?

【讨论】:

    猜你喜欢
    • 2019-05-11
    • 1970-01-01
    • 2020-07-12
    • 2020-10-19
    • 2020-11-24
    • 1970-01-01
    • 2012-03-18
    • 2019-03-30
    • 1970-01-01
    相关资源
    最近更新 更多