2014-12-15 2 views
0

프로젝트에서 처음 Doctrine2 결과 캐시를 구현하고 테스트를 해봤지만 캐시 ID 설정에 대한 의문점이 아직 남아 있습니다. 결과 캐시 매개 변수를 자동으로 쿼리를 관리하는 경우 (제대로 결과를 캐시하는 것이 올바른 코드 나도 몰라 : 나는 변화하는 매개 변수 (id)가Doctrine2 결과 캐시 id

$qb->select('o.img,o.title,o.comment') 
    ->from('MyBundle:Object', 'o') 
    ->where('o.id = :id') 
    ->setParameter('id', $id); 

$result = $qb->getQuery() 
      ->getScalarResult(); 

:

나는이 같은 쿼리를 가지고 있다고 가정)?

첫째, 둘째

$result = $qb->getQuery() 
      ->useResultCache(true,1800,'my_object_' . $id) 
      ->getScalarResult(); 

(나는이 생각) :

$result = $qb->getQuery() 
      ->useResultCache(true,1800,'my_object') 
      ->getScalarResult(); 

작동합니다

답변

0
사실

둘 :-) 사전에 감사합니다. 그러나 차이점은 캐시에 저장된 데이터를 식별하는 이름입니다.

모든 캐시 값은 다음과 같은 구조를 갖습니다 다음

array(
    "raw sql with parameters", 
    array(
     "result 1", 
     "result 2", 
     "result 3", 
    ), 
); 

,

옵션 1 : 응용 프로그램에로드 된 첫 MyBundle:Object 개체에 대한 SQL 및 데이터를 캐시됩니다. 따라서, 두 번째 객체 선택이 다른 id를 가진다면, doctrine은 이전에 캐싱 된 객체를 리턴 할 것입니다.

모든 요청에서 변경되지 않는 개체를 캐시하려는 경우이 코드를 사용할 수 있습니다. 몇 가지 예 : 웹 페이지, 기록 된 사용자 정보, 카운터 등

옵션 2 : MyBundle:Object의 id에 따라 SQL과 데이터를 캐시합니다. 분리 된 객체를로드하려는 경우이 코드를 사용할 수 있습니다. 일부 exaples : 특정 MyBundle : 개체, 특정 특정 이미지, 특정 전자 메일 등