设置
在这种情况下,我正在使用 php 和 mysql。
假设我有这样的mysqli连接:
$link = new mysqli('localhost', 'root', 'password', 'A_Database');
我已安装 mysqlnd 以使用“MYSQL_ASYNC”参数执行异步 mysql 查询:
$link->query("INSERT INTO `A_Table` VALUES('stuff!')", MYSQLI_ASYNC);
目标
我只想插入一条记录,直到遥远的将来我才需要检索它,所以我不关心异步查询完成需要多长时间,我不需要执行一些 final当我知道查询完成时采取行动。一旦我通过了插入查询发生的代码部分,我确实需要执行其他不相关的 mysql 查询。
问题
执行这样的查询将阻止脚本中稍后出现不同步错误的其他查询。为了解决这个问题,我必须在每个异步查询之后添加类似以下代码:
$links = $errors = $reject = array($link);
if ($link->poll($links, $errors, $reject, 1)) {
foreach ($links as $resultLink) {
if ($result = $resultLink->reap_async_query()) {
if (is_object($result)) {
$result->free();
}
}
}
}
这有效地阻止了不同步错误,并且我的代码工作正常。
不过,有两件事仍然困扰着我:
我不想为此烦恼,因为我只执行插入查询,当我知道插入完成时,我不关心在我的代码中有一些响应。
轮询代码在我的服务器上运行得非常慢;比执行常规查询和同步获取结果要慢得多。
回顾
我想以两个要求运行插入查询;该查询是非阻塞的(异步的),稍后我仍然可以执行其他 mysql 查询。我只想插入查询并“忘记它”,然后继续我的代码。
有什么建议最好的方法是什么?