有人告诉我,如果我想使用 predis-async,那么我将使用某种异步 Web 框架(可能使用https://github.com/reactphp/react构建)。我目前正在使用 Yii。
我也被告知
$client->getEventLoop()->run();
该行将启动事件循环,在终止与 Redis 的所有连接并调用所有回调后,该循环不会返回。所以这意味着这条线将阻塞你的代码。尝试运行以下代码(说明 Predis Async 用法的最简单代码):
$client = new Predis\Async\Client('tcp://127.0.0.1:6379');
$client->set('test', 'value');
$client->getEventLoop()->run();
echo 'END';
END 可能不会显示很长时间,也可能永远不会显示,但肯定会比使用非异步 Predis 执行相同的操作更多。
但是,我自己的理解是,现有的 PHP 系统应该能够开箱即用地使用 Predis Async 作为库。这意味着现有的 PHP 系统不需要在 ReactPHP 上。我使用 predis async 的想法类似于使用 mongodb 异步提交。当 PHP 调用 mongodb lib 提交写操作时,它是异步的。Mongodb 立即返回调用,而不是等待写入发生。在这种情况下,mongodb 也不需要异步 php 框架。
是不是真的
END 可能不会显示很长时间,也可能永远不会显示,但肯定会比使用非异步 Predis 执行相同的操作更多。