2015-02-13 48 views
5

Pracuję nad projektem Symfony2 za pomocą Doctrine. Chcę zoptymalizować wydajność interfejsu API, dodając pamięć podręczną do zapytań.Cache Symfony 2 Doctrine query results

Mam spojrzał na kilka opcji, takich jak:

  • Symfony adnotacja cache
  • Doktryna cache
  • Memcache

Nie pewni, z których jeden powinien iść, ale dla mnie to wydaje się, że najbardziej odpowiednie byłyby buforowanie danych na poziomie Doctrine.

Mówiąc, że chciałbym, aby ktoś mi pomógł lub poprowadził mnie, jak skonfigurować pamięć podręczną Doctrine i wyjaśnić, jak to działa.

tzn mam tej kwerendy:

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'); 
    } 
} 

Jak Dodałbym cache do tego zapytania? Czy jest jakaś biblioteka Doktryn potrzebna do wstrzyknięcia jakiejkolwiek rzeczy, której potrzebuję do use?

Odpowiedz

14

W doctrine buforowania zapytań lub wyników można wykonać następujące czynności:

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 
} 

Sprawdź doc uzyskać więcej informacji na temat tych metod. Spowoduje to pracę sterownika pamięci podręcznej your - nie ma znaczenia, jakiego sterownika używasz.

Aby skonfigurować Symfony do korzystania z określonego sterownika zapytań, musisz zmienić swoje ustawienia w config.yml - sprawdź, czy this wyświetla pełną listę opcji. Co jest ważne w pamięci podręcznej jest (jest to przykład apc konfiguracja):

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

Warto również sprawdzić this i this blog

+0

Jeśli jestem i ściśle stosując DBAL doktryny jest jakiś sposób ..? thx – Tomazi

+3

Właśnie zrosłem, że zadałeś już to samo pytanie: http://stackoverflow.com/questions/27899297/caching-doctrine-results-symfony2/27899397#27899397 –

Powiązane problemy