1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > easyswoole数据库连接池_easyswoole redis连接池:集群迁移教程

easyswoole数据库连接池_easyswoole redis连接池:集群迁移教程

时间:2022-06-04 11:58:45

相关推荐

easyswoole数据库连接池_easyswoole redis连接池:集群迁移教程

场景

在业务量小的情况下,我们使用Redis单机连接池就可以满足业务需求。因此,redis单机连接池就可以满足我们的业务。因此我们会这样写:

示例

注册连接池

use EasySwoole\Redis\Config\RedisConfig;

use EasySwoole\RedisPool\Redis;

Redis::getInstance()->register('redis',new RedisConfig());

使用

use EasySwoole\RedisPool\Redis;

use EasySwoole\Redis\Redis as RedisClient

Redis::invoke('redis', function (RedisClient $redis) {

var_dump($redis->set('a', 1));

});

当业务量上来后,我们需要切换成集群模式的时候怎么办。因此我们做的应该是:

注册集群连接池

use EasySwoole\RedisPool\Redis;

use EasySwoole\Redis\Config\RedisClusterConfig;

Redis::getInstance()->register('redis',new RedisClusterConfig([

['172.16.253.156', 9001],

['172.16.253.156', 9002],

['172.16.253.156', 9003],

['172.16.253.156', 9004],

]

));

老业务代码

use EasySwoole\RedisPool\Redis;

use EasySwoole\Redis\Redis as RedisClient

Redis::invoke('redis', function (RedisClient $redis) {

var_dump($redis->set('a', 1));

});

对于之前的老业务代码,就会出现、、、、此事,我的invoker回调参数是一个EasySwoole\Redis\RedisCluster实例,而非EasySwoole\Redis\Redis,

因此就会导致业务代码报错。

解决方案

Easyswoole Redis Pool组件,在2.1.1版本开始,基于easyswoole的magic pool 引入一个cask机制。可以指定实例化的class。

定义一个class

namespace App\Utility;

use EasySwoole\Redis\Redis;

class RedisClient extends Redis

{

function fuck()

{

var_dump('waf');

}

}

该class继承自EasySwoole\Redis\Redis

注册redis

use EasySwoole\Redis\Config\RedisConfig;

use EasySwoole\RedisPool\Redis;

use App\Utility\RedisClient

Redis::getInstance()->register('redis',$config,RedisClient::class);

使用redis

use EasySwoole\RedisPool\Redis;

use App\Utility\RedisClient

Redis::invoke('redis', function (RedisClient $redis) {

var_dump($redis->set('a', 1));

});

迁移集群

修改注册配置

use EasySwoole\RedisPool\Redis;

use EasySwoole\Redis\Config\RedisClusterConfig;

Redis::getInstance()->register('redis',new RedisClusterConfig([

['172.16.253.156', 9001],

['172.16.253.156', 9002],

['172.16.253.156', 9003],

['172.16.253.156', 9004],

]

),RedisClient::class);

继承修改

修改App\Utility\RedisClient,让它继承EasySwoole\Redis\RedisCluster即可

而由于redis单机客户端与集群客户端的方法几乎一致,因此可以不修改任何业务代码,就是实现单机到集群的迁移

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。