Symfony 2第二级缓存启用但未使用



我有至少一个相关实体的记录列表。在记录列表上,我显示了来自相关记录的主列表和数据,因此,如果表具有〜100个记录,则会生成并执行约150个查询:一个用于列表,一个用于每个相关实体,这不是一件好事。它可以很容易地简化为2个查询:一个用于列表,一个一次用于所有相关实体。

正如我发现的那样,学说中的第二级缓存非常适合这种情况。

所以,我已经在配置中启用了缓存:

doctrine:
  orm:
    second_level_cache:
      enabled: true

并添加到所有实体注释@ORMCache(usage="READ_ONLY")。然后,在生成列表之前,我正在获取所有记录,这两个表:

$this->getDoctrine()->getRepository('AppBundle:Refuel')->findAll();
$this->getDoctrine()->getRepository('AppBundle:FuelType')->findAll();

我希望他们会被缓存和大堤实际列表渲染,而无需产生约150个查询。但这不是一个情况。调试面板显示仍执行〜150个查询,并且缓存统计是:

Hits: 0
Misses: 2
Puts: 319

我想实体正在缓存,但没有重复使用。为什么?

我发现的所有关于第二级缓存与redis有关 - 不想使用它 - 使用该缓存需要REDIS吗?

可悲的是,关于如何配置的文档很少。

只是为了扩展@bds和 @jakub的评论,谁有正确的答案,如果您只做一件事,应该就是将查询更改为急切的加载我们查询中的两种实体类型,因此所有记录都将一口获取(:

$refuel= $this->m_em
        ->getRepository('AppBundle:Refuel')
        ->createQueryBuilder('r')
        ->select('r,t')
        ->join('r.fuel_type', 't')
        ->getQuery()
        ->getResult();

完成此操作后,您可以开始考虑使用第二级缓存。为此,您需要在配置[_prod]中指定缓存驱动程序。

second_level_cache:
  region_cache_driver:
    type: memcache
  enabled: true
  log_enabled: false
  regions:
    my_region:
      cache_driver: memcache
      lifetime: 3600

,然后将注释添加到可缓存的实体:

/**
 * @ORMEntity
 * @ORMTable(name="fos_user")
 * @ORMCache(usage="NONSTRICT_READ_WRITE", region="my_region")
 */

相关内容

  • 没有找到相关文章

最新更新