Redis-Pool

EasySwoole 提供了一个Redis Pool组件,等于高度封装了Pool的链接管理器

安装

composer require easyswoole/redis-pool

该组件基于pool管理器封装

添加数据库配置

dev.php或者是produce.php中添加配置信息:

/*################ REDIS CONFIG ##################*/
'REDIS' => [
    'host'          => '127.0.0.1',
    'port'          => '6379',
    'auth'          => '',
    'intervalCheckTime'    => 30 * 1000,//定时验证对象是否可用以及保持最小连接的间隔时间
    'maxIdleTime'          => 15,//最大存活时间,超出则会每$intervalCheckTime/1000秒被释放
    'maxObjectNum'         => 20,//最大创建数量
    'minObjectNum'         => 5,//最小创建数量 最小创建数量不能大于等于最大创建   
]

主进程注册

一般滴,我们在EasySwoole的全局initialize 事件中,进行注册

use EasySwoole\EasySwoole\Config as GConfig;
use EasySwoole\RedisPool\Config;
use EasySwoole\RedisPool\Redis;
$configData = GConfig::getInstance()->getConf('REDIS');
$config = new Config($configData);
// $config->setOptions(['serialize'=>true]);
/**
    这里注册的名字叫redis,你可以注册多个,比如redis2,redis3
*/
$poolConf = Redis::getInstance()->register('redis',$config);
$poolConf->setMaxObjectNum($configData['maxObjectNum']);
$poolConf->setMinObjectNum($configData['minObjectNum']);

可配置选项

  • connect_timeout: 连接的超时时间, 默认为全局的协程socket_connect_timeout(1秒)

  • timeout: 超时时间, 默认为全局的协程socket_timeout(-1, 永不超时)

  • serialize: 自动序列化, 默认开启

  • reconnect: 自动连接尝试次数, 如果连接由于超时等原因被close正常断开, 下一次发起请求时, 会自动尝试连接然后再发送请求, 默认为1次(true), 一旦失败指定次数后不会再继续尝试, 需手动重连. 该机制仅用于连接保活, 不会重发请求导致不幂等接口出错等问题

  • compatibility_mode: hmGet/hGetAll/zRange/zRevRange/zRangeByScore/zRevRangeByScore 函数返回结果与php-redis不一致的兼容解决方案,开启之后 Co\Redis 和 php-redis 返回结果一致,默认关闭

compatibility_mode 配置项在4.4.0或更高版本可用

服务启动后任意位置使用

  /*@var \EasySwoole\RedisPool\Connection $redis */
    $redis = \EasySwoole\RedisPool\Redis::getInstance()->pool('redis')::defer();
    ($redis->set('name','仙士可'));
    $redis = \EasySwoole\RedisPool\Redis::defer('redis');
    var_dump($redis->get('name'));

    $data = \EasySwoole\RedisPool\Redis::invoker('redis',function (\EasySwoole\RedisPool\Connection $redis){
        return $redis->