2014-03-25 86 views
0

我在我的控制了以下行動:Symfony2的緩存過期

public function popularPlacesAction() 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $query = $em->createQuery(
     "SELECT COUNT(s.id) as total, l.city as name, l.country_code as country_code 
      FROM AcmeMyBundle:Sample s 
      LEFT JOIN s.location l 
      WHERE l.city != '' 
      GROUP BY name 
      ORDER BY total DESC" 
    )->setMaxResults(15); 

    $cities = $query->getResult(); 

    return array(
     'cities' => $cities 
    ); 
} 

我想使用高速緩存設置爲響應到期日,如果查詢的結果已經改變並不重要。我只是想將響應設置爲公開並每小時刷新一次響應,例如。如何在響應來自緩存時執行此操作而不執行原則查詢?

回答

3

您需要使用一些緩存方法(可能是Varnish或symfony的反向代理),然後將一些緩存標頭設置爲您的操作響應。看看這裏: Expiration with the Cache-Control Header 例如:

public function popularPlacesAction() 
{ 
    ... 
    $response = new Response(); 
    $response->setSharedMaxAge(3600); 
    $response->setContent(....); 
    return $response; 
} 

希望這有助於。其他文檔閱讀: HTTP Cache

+0

謝謝你的回答。我不明白這一點的是:如果我想只在緩存的響應過期時才執行doctrine查詢,那麼將此片段放在我的操作中的何處? –

+1

@YvanL你不需要。反向代理(如清漆)如果仍然有新的響應,則不會向您的應用發出其他請求。 –

+2

閱讀:http://symfony.com/doc/current/book/http_cache.html http://tomayko.com/writings/things-caches-do http://www.mnot.net/cache_docs/ –