Symfony 2缓存Doctrine查询结果

时间:2015-02-13 11:12:12

标签: php symfony caching doctrine-orm

我正在使用Doctrine开发Symfony2项目。我想通过向查询添加缓存来优化API性能。

我看过几个选项,例如:

  • Symfony注释缓存
  • Doctrine cache
  • Memcache

不确定我应该去哪一个,但对我而言,似乎在Doctrine级别缓存数据是最合适的。

说我希望有人帮助我或指导我如何设置Doctrine缓存并解释它是如何工作的。

我有这个问题:

class QueryFactory

    protected $connect;

    public function __construct(Connection $connection)
    {
        $this->connect = $connection;
    }

    private function myQuery()
    {
        return $this->connect->createQueryBuilder()
            ->select('user_id')
            ->from('users', 'u')
            ->where('u.user_id = 2');
    }
}

如何为此查询添加缓存?是否有任何Doctrine库我需要注入use所需的任何东西?

1 个答案:

答案 0 :(得分:20)

doctrine中缓存查询或结果,您可以执行以下操作:

private function myQuery()
{
    return $this->connect->createQueryBuilder()
        ->select('user_id')
        ->from('users', 'u')
        ->where('u.user_id = 2')
        ->getQuery()
        ->useQueryCache(true)    // here
        ->useResultCache(true);  // and here
}

检查doc以获取有关这些方法的更多信息。这将使your缓存驱动程序正常工作 - 与您使用的驱动程序无关。

要配置Symfony以使用特定查询驱动程序,您需要在config.yml中调整设置 - 检查this以查看完整的选项列表。缓存中最重要的是(这是apc配置示例):

entity_managers:
        some_em:
            query_cache_driver: apc
            metadata_cache_driver: apc
            result_cache_driver: apc

您可能还想查看thisthis博客条目