我有一个 cli php 脚本,每当电子邮件到达特定地址时就会执行该脚本。
当新电子邮件到达时,将执行脚本的新实例,但由于它们读/写相同的数据库表,有时会写入错误的数据。
我的问题是,如果第一个脚本锁定它需要的所有表,并且运行脚本的第二个/第三个等实例,他们会等待表被第一个执行的脚本解锁吗?如果是这样,需要多久?
最后,我要做的是让脚本以串行方式一个接一个地进行读/写,以避免重复和错误。
我有一个 cli php 脚本,每当电子邮件到达特定地址时就会执行该脚本。
当新电子邮件到达时,将执行脚本的新实例,但由于它们读/写相同的数据库表,有时会写入错误的数据。
我的问题是,如果第一个脚本锁定它需要的所有表,并且运行脚本的第二个/第三个等实例,他们会等待表被第一个执行的脚本解锁吗?如果是这样,需要多久?
最后,我要做的是让脚本以串行方式一个接一个地进行读/写,以避免重复和错误。
是的,它会等待。这是由数据库服务器完成的,客户端应用程序完全不知道它正在发生——据它所知,数据库执行查询的速度很慢。
PHP 脚本使用 mysql 库(mysql、mysqli、pdo)作为任何 mysql 客户端连接到 mysql 服务器并让它执行查询。mysql 服务器可以占用它想要的所有时间。
但是可以将 PHP 设置为限制总脚本执行时间(包括任何 mysql 查询)。如果超过此限制,PHP 将终止正在运行的进程。默认情况下,最大执行时间是 30 秒,如果我没记错的话,对于 cli 甚至是 300 秒。您可以在 php.ini 中进行设置。您甚至可以将 CLI 最大执行时间设置为无限制。