我正在使用memcahe
用于Symfony Doctrine缓存驱动程序,如下所示:
doctrine:
orm:
metadata_cache_driver: memcache
result_cache_driver: memcache
query_cache_driver: memcache
我有Article
和Tag
个manyToMany
关系的实体。我有一个控制器,可以获取所有文章(带分页)并将它们渲染成树枝。以下代码位于Article
存储库中,该存储库使用useQueryCache()
和useResultCache()
:
$articles = $this->createQueryBuilder('a')
->orderBy('a.created_at', 'DESC')
->getQuery()
->useQueryCache(true)
->useResultCache(true)
->getResult();
DQL完全缓存查询和结果,因为我没有在Symfony Profiler Doctrine部分看到执行的查询。问题是关联实体Tag
未被缓存的结果。我在树枝上有以下代码:
{% for article in articles %}
// ...
{% if article.tags|length %}
<div class="tag-wrapper clearfix">
{% for tag in article.tags %}
// ...
{% endfor %}
</div>
{% endif %}
// ...
{% endfor %}
调用article.tags
似乎始终在没有缓存的情况下获取相关文章的标签。我看到所有查询都在Symfony Profiler Doctrine部分的每个页面加载上执行。是否可以缓存此内容?
答案 0 :(得分:2)
你遗漏了几件事:
tags
关系,而且您未在查询中选择在这里查看一些指示:Doctrine2 (Doctrine 2.1) eager loading in Symfony2。
另一方面,如果您预期很多文章在该页面上有很多标签,我会小心这样做。即使使用缓存,您也可能会遇到时间和/或内存问题。