2.3. 对象池模式(Pool)
定义
对象池模式是一种提前准备了一组已经初始化了的对象 『池』
uml

代码实现
<?php
abstract class WorkPoolAbstract
{
    protected $pools = []; //存放所有对象 
    protected $maxNum = 100; //初始化多少个对象
    public function get()  // 取出其中一个对象
    { 
      return array_pop($this->pools);
    }
    public function add($work)   //将对象加入到对象池
    { 
      $this->pools[spl_object_hash($work)] = $work;
    }
}
//redis进程池
class RedisPool extends WorkPoolAbstract
{
    public function init() //初始化所有redis连接 放入$pools
    { 
        for($i =0;$i < $this->maxNum; $i++)
        $this->add(new RedisService());
    }
}
//redis服务
class RedisService
{
  public function put($key,$val)
  {
      echo "write {$key}".PHP_EOL;
  }
  public function get($val)
  {
      echo "get $val".PHP_EOL;
  }
}
$redisPool = new RedisPool();
$redisPool->init();
$redisPool->get()->put('key1','val');
$redisPool->get()->get('key1');使用场景
例如:laravel使用swoole的websocket。
不应该使用\Illuminate\Support\Facades\Redis,
他们共用的是同一个redis连接,很多请求时,将会发生错误。
应当为每个请求重新创建一个redis连接,
但每次创建,更耗费资源。
创建一个进程池更为优解。
(进程池对于 fpm 这种 应该没啥用 )
 
           php设计模式学习
php设计模式学习 
         
             
             关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: