在 Symfony2 中使用 APC 的 Doctrine 缓存
Doctrine cache using APC in Symfony2
我正在尝试使用 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
总是 returns false
布尔值。
我检查过 php.ini 文件中是否启用了 APC,而且它在 Symfony 分析器中似乎也已启用。
有什么我可能遗漏的吗?
您的配置看起来不错,结果很可能存储在 APC
缓存中。
方法 useResultCache
的工作方式是 Doctrine
执行查询并将结果存储在缓存中,当查询是第一次 运行 时。之后(在 timeout
集合内)不查询数据库结果,直接从缓存中获取。
我认为这里真正的问题是您验证结果是否存储在 APC
缓存中的方式。我会建议其他(更可靠)的方法来检查它:
- 查看日志文件并检查请求期间 运行 的查询。您应该仅在第一次请求时看到 sql(未填充缓存时)
- 尝试在第一次查询后更改数据库中的值 运行。当查询第二次为 运行 时,您应该会看到相同的结果(尽管您进行了编辑)。
还要确保您的缓存驱动程序 (APC
) 是针对哪个环境 (dev
、prod
) 配置的,因为这可能因不同环境而异(缓存通常在 dev
环境)
编辑:我做了一些进一步的研究,现在我确定你的验证方法是错误的。您正在使用的方法 fetch
看起来像:
public function fetch($id)
{
return $this->doFetch($this->getNamespacedId($id));
}
事实上,您在 useResultCache
方法中使用 favorite
键并不意味着 doctrine
在内部使用此键,因为它是由 getNamespacedId
方法转换的.
我正在尝试使用 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
总是 returns false
布尔值。
我检查过 php.ini 文件中是否启用了 APC,而且它在 Symfony 分析器中似乎也已启用。
有什么我可能遗漏的吗?
您的配置看起来不错,结果很可能存储在 APC
缓存中。
方法 useResultCache
的工作方式是 Doctrine
执行查询并将结果存储在缓存中,当查询是第一次 运行 时。之后(在 timeout
集合内)不查询数据库结果,直接从缓存中获取。
我认为这里真正的问题是您验证结果是否存储在 APC
缓存中的方式。我会建议其他(更可靠)的方法来检查它:
- 查看日志文件并检查请求期间 运行 的查询。您应该仅在第一次请求时看到 sql(未填充缓存时)
- 尝试在第一次查询后更改数据库中的值 运行。当查询第二次为 运行 时,您应该会看到相同的结果(尽管您进行了编辑)。
还要确保您的缓存驱动程序 (APC
) 是针对哪个环境 (dev
、prod
) 配置的,因为这可能因不同环境而异(缓存通常在 dev
环境)
编辑:我做了一些进一步的研究,现在我确定你的验证方法是错误的。您正在使用的方法 fetch
看起来像:
public function fetch($id)
{
return $this->doFetch($this->getNamespacedId($id));
}
事实上,您在 useResultCache
方法中使用 favorite
键并不意味着 doctrine
在内部使用此键,因为它是由 getNamespacedId
方法转换的.