Symfony 2缓存Doctrine查询结果

9
我正在使用Doctrine开发Symfony2项目。我想通过添加缓存来优化API性能。
我看过了几个选项,例如:
- Symfony注释缓存 - Doctrine缓存 - 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库或需要使用的东西?

1个回答

26

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
}

查看文档以获取关于这些方法的更多信息。这将使您的缓存驱动程序工作 - 不管您使用哪个驱动程序。

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

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

你可能还想查看博客文章


如果我严格使用dbal Doctrine,有没有办法...?谢谢 - Tomazi
3
我刚刚意识到你已经问过同样的问题:https://dev59.com/kYbca4cB1Zd3GeqPatGP#27899397。 - Tomasz Madeyski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接