Symfony2和Doctrine APC Cache

时间:2014-09-10 12:42:35

标签: symfony doctrine apc

我已经阅读了与性能相关的symfony2文档,我已经实现了以下步骤。

  1. 安装APC' php-apc'在我的网络服务器上并重启我的网络服务器
  2. 修改我的学说配置

    doctrine:
    
    dbal:
    
        driver:   "%database_driver%"
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
    
       orm:
    
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: true
        metadata_cache_driver: apc
        result_cache_driver: apc
        query_cache_driver: apc
    
  3. 现在,如果我调用一个动作从数据库中检索所有用户,我会在底部的信息栏中看到每次114次查询时都会执行该学说。为什么查询没有缓存?

    我的行动如下:

    $users = $this->getDoctrine()->getRepository('AppUserBundle:User')->findAll();
    return $this->render('AppUserBundle:User:index.html.twig', array('users' => $users));
    

1 个答案:

答案 0 :(得分:3)

默认情况下,Doctrine不会缓存查询结果。您必须明确指出要使用useResultCache方法缓存查询。例如,如果您想要缓存获取所有用户,请在User repository类中编写您自己的方法:

use Doctrine\ORM\EntityRepository;

class UserRepository extends EntityRepository
{

    public function fetchAll()
    {
        $query = $this->createQueryBuilder('u')->getQuery();

        return $query->useResultCache(true)->getResult();
    }
}

该方法可能需要额外的参数:

public function useResultCache($bool, $lifetime = null, $resultCacheId = null)
  • $ bool - 如果要缓存查询结果,请设置为true
  • $ lifetime - 以秒为单位的缓存结果的TTL
  • $ resultCacheId - 你可以传递你自己的id,如果null Doctrine会处理那个