Memcache连接池示例
安装 easyswoole/pool 组件:
composer require easyswoole/pool
新增MemcachePool管理器
新增文件/App/Pool/MemcachePool.php
<?php
/**
* Created by PhpStorm.
* User: Tioncico
* Date: 2019/10/15 0015
* Time: 14:46
*/
namespace App\Pool;
use EasySwoole\Memcache\Memcache;
use EasySwoole\Pool\Config;
use EasySwoole\Pool\AbstractPool;
use EasySwoole\Memcache\Config as MemcacheConfig;
class MemcachePool extends AbstractPool
{
protected $memcacheConfig;
/**
* 重写构造函数,为了传入memcache配置
* RedisPool constructor.
* @param Config $conf
* @param MemcacheConfig $memcacheConfig
* @throws \EasySwoole\Pool\Exception\Exception
*/
public function __construct(Config $conf,MemcacheConfig $memcacheConfig)
{
parent::__construct($conf);
$this->memcacheConfig = $memcacheConfig;
}
protected function createObject():Memcache
{
//根据传入的memcache配置进行new 一个memcache客户端
$memcache = new Memcache($this->memcacheConfig);
return $memcache;
}
}
注册到Manager中(在initialize
事件中注册):
$config = new \EasySwoole\Pool\Config();
$memcacheConfig1 = new \EasySwoole\Memcache\Config(Config::getInstance()->getConf('MEMCACHE1'));
\EasySwoole\Pool\Manager::getInstance()->register(new \App\Pool\MemcachePool($config,$memcacheConfig1),'memcache1');
$memcacheConfig2 = new \EasySwoole\Memcache\Config(Config::getInstance()->getConf('MEMCACHE2'));
\EasySwoole\Pool\Manager::getInstance()->register(new \App\Pool\MemcachePool($config,$memcacheConfig2),'memcache2');
调用(可在控制器中全局调用):
go(function (){
$memcachePool1 = Manager::getInstance()->get('memcache1');
$memcachePool2 = Manager::getInstance()->get('memcache2');
$memcache1 = $memcachePool1->getObj();
$memcache2 = $memcachePool2->getObj();
var_dump($memcache1->set('name', '仙士可1'));
$this->response()->write($memcache1->get('name'));
var_dump($memcache2->set('name', '仙士可2'));
$this->response()->write($memcache2->get('name'));
//回收对象
$memcachePool1->recycleObj($memcache1);
$memcachePool2->recycleObj($memcache2);
});
::: warning 详细用法可查看 pool通用连接池 :::
::: warning 本文 memcache连接池 基于 pool通用连接池 实现 :::