我的问题基本上是当重新运行相同的查询时,学说不使用 apc 缓存的结果。因此,我的执行时间很长。我在网上没有发现类似的问题。
我的环境:
WAMP(32 位)PHP 5.4.16
在 Windows7 上。87ms
具有平均 ping的远程数据库上的 MySQL 数据库。Laravel4 通过 composer 安装了 laravel-doctrine 包:
doctrine/dbal - 2.4.x-dev
doctrine/orm - 2.4.x-dev
我的问题:
缓存的学说查询生成器不使用缓存的 apc 数据。
询问:
$query = Doctrine::createQueryBuilder();
$query->select('e')->from("Persistent\Users\Experts\Expert", "e");
$this->prepareSort($sort, $query);
$query->orderBy($this->sortField, $this->sortVector);
//prepare paginator
$queryPaginator = new DoctrinePaginator($query);
$this->total = $queryPaginator->count();
return $queryPaginator ->getQuery()
->setResultCacheDriver(new ApcCache())
->useResultCache(true, 300, 'expertsearch')
->setFirstResult(0)
->setMaxResults(20)
->getResult();
结果:
由于我的机器和数据库服务器之间的距离,查询大约需要 17 秒才能完成。
如上所示启用缓存不会影响速度。
APC 使用缓存如下所示:
DoctrineNamespaceCacheKey[] 1 584 2013/10/30 08:33:08 2013/10/30 08:33:08 2013/10/30 08:33:08 None [Delete Now]
[expertsearch][1] 0 27880 2013/10/30 08:33:08 2013/10/30 08:33:08 2013/10/30 08:33:08 300 seconds [Delete Now]
[121cbb9b3c38e7d5a0c0e7b74c59e640][1] 0 3672 2013/10/30 08:33:08 2013/10/30 08:33:08 2013/10/30 08:33:08 None [Delete Now]
与不使用查询构建器中的缓存相比,Webgrind 显示对 PDO 的调用次数没有变化。
Function Invocation Count Total Self Cost Total Inclusive Cost
php::PDOStatement->execute 183 15932 15932
php::PDO->query 7 588 588