我正在使用Google客户端API来获取实例的状态以制作本地数据库副本。
多个脚本可能会更新我的本地副本。我可以获取数据,并且当数据回传到服务器时,其他一些脚本将修改数据。从原始读取存储数据后,将创建丢失的更新。
因此,在进行更新时,我需要使用事务来阻止所有其他流量到我的表
这是获取的代码:
<?php
require_once './gcloud/vendor/autoload.php';
$client = new Google_Client();
$client->setApplicationName('Google-ComputeSample/0.1');
$client->useApplicationDefaultCredentials();
$client->addScope('https://www.googleapis.com/auth/cloud-platform');
$project = 'project_id'; // TODO: Update placeholder value.
$zone = 'us-east1-b'; // TODO: Update placeholder value.
$instance = 'instance-1'; // TODO: Update placeholder value.
$mysqli = new mysqli($hn, $un, $pw, $db);
$mysqli->begin_transaction();
$listInstancesJSON = $service->instances->listInstances($project, $zone, []);
//store it
$mysqli->commit();
发出请求时阻塞表听起来是个糟糕的主意。我想我会在脚本的开头添加
ini_set('max_execution_time', 5);
,以防万一抓取失败(我想他们使用curl)。如果执行时间超过5秒,即使脚本终止后,我的表(或数据库)是否仍会阻塞?我还应该实施其他防御机制吗?我计划每分钟将这段代码作为cron作业运行。
最佳答案
听起来listInstances
需要相当于
SELECT ... FOR UPDATE
关于php - 在交易中缩,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51463267/