作者归档:Ng

降低使用PHP curl_multi_* 时的 load

TL;DR

如果选择通过 curl_multi_* 函数并行发起请求,需要在使用 curl_multi_select 返回 -1 时增加休眠时间以降低 load。形如(代码来自 Guzzle):

if ($this->active &&
    curl_multi_select($this->_mh, $this->selectTimeout) === -1
) {
    usleep(250);
}

使用的软件版本为:

  • PHP 5.4.41
  • libcurl 7.19
  • Guzzle 5.3

继续阅读

PHP设计模式学习笔记

TL;DR

设计模式有助于写出组织结构更为合理的代码,少数实现上也和语言特性有所关系。

设计模式的样例以及说明网上都存在很多的样例,本文作为学习笔记,只简要记录学习过程中的个人理解的一些要点,如有错误,烦请指出。

继续阅读

Yaf集成Eloquent——使用事务以及DB Facade

TL;DR

集成方法参见 Yaf集成Eloquent

集成基类的多个 Model 如果要正确的运行事务,需要保证各个 Model 的实例使用的是同一个数据库连接,在代码上可以通过共用同一个 Illuminate\Database\Capsule\Manager 对象实现。

使用 DB Facade 需要为 Facade 提供已经关联了 db 作为键,以 Illuminate\Database\Capsule\Manager 的实例为值的容器。

继续阅读

PHP中Redis/MySQL的长连接

TL;DR

PHP 中针对 Redis / MySQL 的长连接是生命周期级别的长连接,对于同一个进程的每一次请求都不会释放当前连接对象。而针对 TCP Socket 级别的连接是否已断开,则交给操作系统维持。

使用 PDO 对 MySQL 开启持久连接,要注意 PHP 执行的进程数量,不能超过 MySQL 设定的最大连接数。

上述结论的前提是使用 phpredis 扩展,PHP 版本为 5.4.41。

继续阅读