连接池组件

  //defer方式获取连接  这个方式携程(携程就是一个请求)结束会自动回收

$redis = \EasySwoole\RedisPool\RedisPool::defer();

$redisCluster = \EasySwoole\RedisPool\RedisPool::defer();

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

$redisCluster->set('a',1);

//invoke方式获取连接  这个方式是闭包的 使用完立马回收

\EasySwoole\RedisPool\RedisPool::invoke(function(\EasySwoole\Redis\Redis $redis){ var_dump($redis->set('a',1));});\EasySwoole\RedisPool\RedisPool::invoke(function(\EasySwoole\Redis\Redis $redis){ var_dump($redis->set('a',1));})

;//获取连接池对象  这个要手动销毁

$redisPool = \EasySwoole\RedisPool\RedisPool::getInstance()->getPool();$redisClusterPool = \EasySwoole\RedisPool\RedisPool::getInstance()->getPool();$redis = $redisPool->getObj();$redisPool->recycleObj($redis);

mysql

在高并发情况下,资源浪费的占用时间越短越好,可以提高程序的服务效率。

在ORM默认情况下是使用defer方法获取pool内的连接资源,并在协程退出时自动归还,在此情况下,在带来便利的同时,会造成不必要资源的浪费。

我们可以使用invoke方式,让ORM查询结束后马上归还资源,可以提高资源的利用率

$page = (int)$this->input('page', 1);

$value = DbManager::getInstance()->invoke(function ($client) use($page){

    $limit = (int)$this->input('limit', 20);

    $model = new UserModel();

    $testUserModel = $model::invoke($client);

    $data = $testUserModel->getAll($page, $this->input('keyword'), $limit);;

    $this->writeJson(Status::CODE_OK, $data, 'success');

});

在此种模式下,主要有两个方法需要讲解。

DbManager下的invoke方法 (从连接池内获取一个连接,并在闭包完成时归还连接)

Model的invoke方法 (注入客户端连接,不再从连接池内defer获取)


什么是连接池

连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。

简单来说,就是创建一个容器,并且把资源提前准备好放在里面,比如我们常用的redis连接、mysql连接。

连接池的优点

计算机是由许多零件组装而成,比如CPU、内存、硬盘等等。

当我们进行网络连接、请求的时候,就需要在不同组件中传递和返回各种信号、数据

比如在CPU、内存、网卡中,数据的传递,请求,获取。

如果在短时间内进行一万次mysql的连接,就需要在这个往返过程循环,在路上浪费了很多时间、性能消耗。

如果我们先把连接连接好,并且放在连接池中,程序中需要使用就从池中获取,执行操作。

就省去了反复创建连接、断开连接的操作。

可以减少I/O操作,提高资源利用率。

连接池数量如何设置

那么一个池需要设置多少数量比较合适呢?是不是越多越好?

连接数量需要根据并发数,以及数据库的处理情况来决定的,

比如你的数据库最大只能处理500个连接,那你设置700个,数据库照样处理不过来,设置过多并没有什么用处,反而可能会让数据库宕机

所以,一般情况下,连接池总数设置为100-200左右就够了(相当于200的并发)

这里的连接池数量,说的是总数量,在easyswoole中,需要根据进程来看,每个进程*连接池配置数量=总数量,比如easyswoole中worker进程为8,那你设置20个,那就是20*8=160的总数

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容