我尝试使用doctrine缓存来保存查询的数据结果。
我已使用以下缓存配置选项更新了配置文件中的学说信息:
orm:
...
metadata_cache_driver: apc
query_cache_driver: apc
result_cache_driver: apc
以下是我应用结果缓存的查询示例:
$query = $this->repository->createQueryBuilder('fp')
->where('fp.userId = :userId')
->setParameter('userId', $userId)
->getQuery()
->useResultCache(true, 3600, 'favorite');
return $query->getResult();
它可以无错误地检索数据,但似乎并没有将结果存储在APC缓存中。
我尝试以下代码以检查查询结果是否已缓存在APC中:
$q = new \Doctrine\Common\Cache\ApcCache();
$data = $q->fetch('favorite');
但是data
始终返回false
布尔值。
我已经检查过php.ini文件中是否启用了APC,并且它在Symfony探查器中显示为启用。
我可能遗失的任何东西?
答案 0 :(得分:4)
您的配置似乎很好,结果很可能存储在APC
缓存中。
方法useResultCache
以Doctrine
执行查询的方式工作,并在第一次运行查询时将结果存储在缓存中。之后(在timeout
集内)数据库未查询结果,它将直接从缓存中获取。
我认为这里的一个真正问题是您验证结果是否存储在APC
缓存中的方式。我会建议其他(更可靠)的方法来检查它:
还要确保配置缓存驱动程序(dev
)的环境(prod
,APC
),因为这可能因各种环境而异(缓存通常在{{1}中禁用环境)
编辑:我做了一些进一步的研究,现在我确定您的验证方法是错误的。您正在使用的方法dev
如下:
fetch
因此,您在public function fetch($id)
{
return $this->doFetch($this->getNamespacedId($id));
}
方法中使用favorite
密钥并不意味着useResultCache
在内部使用此密钥,因为它是由doctrine
方法转换的。< / p>