場景
在業(yè)務(wù)量小的情況下,我們使用Redis單機(jī)連接池就可以滿足業(yè)務(wù)需求。因此,redis單機(jī)連接池就可以滿足我們的業(yè)務(wù)。因此我們會這樣寫:
示例
注冊連接池
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));
});
當(dāng)業(yè)務(wù)量上來后,我們需要切換成集群模式的時候怎么辦。因此我們做的應(yīng)該是:
注冊集群連接池
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],
]
));
老業(yè)務(wù)代碼
use EasySwoole\RedisPool\Redis;
use EasySwoole\Redis\Redis as RedisClient
Redis::invoke('redis', function (RedisClient $redis) {
var_dump($redis->set('a', 1));
});
對于之前的老業(yè)務(wù)代碼,就會出現(xiàn)、、、、此事,我的invoker回調(diào)參數(shù)是一個EasySwoole\Redis\RedisCluster
實例,而非EasySwoole\Redis\Redis
,
因此就會導(dǎo)致業(yè)務(wù)代碼報錯。
解決方案
Easyswoole Redis Pool組件,在2.1.1版本開始,基于easyswoole的magic pool 引入一個cask機(jī)制。可以指定實例化的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單機(jī)客戶端與集群客戶端的方法幾乎一致,因此可以不修改任何業(yè)務(wù)代碼,就是實現(xiàn)單機(jī)到集群的遷移