2017-05-26 89 views
2

我試圖使用Doctrine Result Caching與Redis和Predis以及SncRedisBundle和Symfony。如何檢測原則查詢是否來自緩存?

我想知道如果我的緩存+理論+的Redis + predis + SncRedisBundle配置設置正確

snc_redis: 
    clients: 
     default: 
      type: predis 
      alias: default 
      dsn: redis://localhost 
    doctrine: 
     metadata_cache: 
      client: default 
      entity_manager: default   
      document_manager: default   
     result_cache: 
      client: default 
      entity_manager: [default, read] 
     query_cache: 
      client: default 
      entity_manager: default 

,因爲下面的查詢顯示什麼預期,但我怎麼知道它是否來自緩存或不?

$query = $repository->createQueryBuilder('p') 
    ->where('p.id < :id') 
    ->setParameter('id', '100') 
    ->orderBy('p.id', 'ASC') 
    ->getQuery() 
    ->useQueryCache(true)  
    ->useResultCache(true); 

$products = $query->getResult(); 

回答

0

正如你在這個測試https://github.com/doctrine/doctrine2/blob/master/tests/Doctrine/Tests/ORM/Functional/ResultCacheTest.php#L40中看到的那樣,沒有這樣做的功能。

您可以通過但無論是定義自己的cacheId或使用 ->getQuery()->getResultCacheId() 棄用->getQuery()->getQueryCacheProfile()->getCacheKey()->getQuery()->getResultCacheDriver()->fetch($cacheKey)

實現這一來源:https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/AbstractQuery.php#L945