2014-09-10 102 views
0

我已經閱讀了關於性能的symfony2的文檔,並且已經實現了以下步驟。Symfony2和Doctrine APC Cache

  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 
    

如果我叫一個動作從數據庫中獲取所有用戶我在底部的信息欄中看到該規則每次執行114個查詢。爲什麼查詢不被緩存?

我的動作是這樣的:

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

您使用哪個版本的原則? – skler 2014-09-10 14:15:06

+0

我現在不在辦公室,但我的意思是教條2.2 – smartcoderx 2014-09-10 16:43:03

回答

1

主義默認情況下不緩存查詢結果。您必須明確指出您想要使用useResultCache方法緩存查詢。舉例來說,如果你希望緩存讓所有用戶,寫自己的方法在用戶信息庫類:

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如果你希望緩存查詢結果
  • $一生 - 以秒爲
  • $ resultCacheId緩存結果TTL - 你可以通過你自己的ID,在情況主義將處理
+0

非常感謝這項工作:)我認爲我必須創建一個具有「查找/獲取」功能的基礎知識庫,並且擴展我的基礎知識庫。所以我可以將它用於每個存儲庫。 – smartcoderx 2014-09-11 06:29:40