Coroutine\Redis
最后更新于:2022-04-02 06:27:51
# Coroutine\\Redis
[TOC]
> 推荐使用`Swoole\Runtime::enableCoroutine`\+ phpredis 或 predis 的 方式, 一键协程化原生PHP的redis客户端使用, 减小开发成本.
>
> 4.2.6版本及以后不再需要手动安装和启用async-redis, 而是swoole自带
* 需要安装一个第三方的异步Redis库[hiredis](https://github.com/redis/hiredis)
~~~
sudo make
sudo make install
sudo ldconfig
~~~
* 需要在编译时增加`--enable-async-redis`来开启此功能
* **请勿同时使用异步回调和协程`Redis`**
## 使用示例
* * *
~~~
$redis = new Swoole\Coroutine\Redis();
$redis->connect('127.0.0.1', 6379);
$val = $redis->get('key');
~~~
## defer特性
~~~
const REDIS_SERVER_HOST = '127.0.0.1';
const REDIS_SERVER_PORT = 6379;
go(function () {
$redis = new Swoole\Coroutine\Redis();
$redis->connect(REDIS_SERVER_HOST, REDIS_SERVER_PORT);
$redis->setDefer();
$redis->set('key1', 'value');
$redis2 = new Swoole\Coroutine\Redis();
$redis2->connect(REDIS_SERVER_HOST, REDIS_SERVER_PORT);
$redis2->setDefer();
$redis2->get('key1');
$result1 = $redis->recv();
$result2 = $redis2->recv();
var_dump($result1, $result2);
});
~~~
## pipeline
`Redis`服务器支持多条指令并发执行。可使用`defer`特性启用`pipeline`
~~~
const REDIS_SERVER_HOST = '127.0.0.1';
const REDIS_SERVER_PORT = 6379;
go(function () {
$redis = new Swoole\Coroutine\Redis();
$redis->connect(REDIS_SERVER_HOST, REDIS_SERVER_PORT);
$redis->setDefer();
$redis->set('key1', 'value');
$redis->get('key1');
$result1 = $redis->recv();
$result2 = $redis->recv();
var_dump($result1, $result2);
});
~~~
> `subscribe pSubscribe`无法用于defer(true)的情况。
';