Symfony 2缓存Doctrine查询结果

Tom*_*azi 7 php caching symfony doctrine-orm

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

我看了几个选项,例如:

  • Symfony注释缓存
  • Doctrine缓存
  • 内存缓存

不确定我应该去哪一个,但对我而言,似乎在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');
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*ski 21

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
}
Run Code Online (Sandbox Code Playgroud)

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

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

entity_managers:
        some_em:
            query_cache_driver: apc
            metadata_cache_driver: apc
            result_cache_driver: apc
Run Code Online (Sandbox Code Playgroud)

您可能还需要检查这个这个博客条目

  • 我刚刚说你已经问了相同的问题http://stackoverflow.com/questions/27899297/caching-doctrine-results-symfony2/27899397#27899397 (3认同)