2013-03-21 114 views
5

我最近編寫了我的第一個Symfony2應用程序,一切都很好,除了現在我想添加一些查詢緩存以提高性能並減少不必要的查詢。我已經添加了以下行一個特定查詢的建設者:在Symfony2/Doctrine中清除查詢緩存

$query->useResultCache(true) 
     ->useQueryCache(true); 

第一個請求,然後使用緩存的預期。我可以在分析器中驗證。一切都很棒!

問題是我也有一個簡單的管理面板,我寫的允許用戶修改內容,但更改後緩存的版本仍在使用中。

有沒有一種方法可以'編程'告訴Symfony2/Doctrine在我更新數據時清除查詢緩存,或者是否有配置方法?

這似乎是一個普遍的問題,但我找不到有關這個問題的任何谷歌!

+0

可以ü請讓我知道究竟怎麼了我們能夠使用Profiler檢查緩存是否正在工作,特別是使用PROFILER。我試着檢查數據庫查詢的數量,並且由於每次在緩存執行前後都會收到相同數量的查詢,所以我不知道它是否正常工作或者是否應該做到這一點,無論如何,提示? – 2015-09-17 15:47:01

回答

19

我建議使用結果緩存ID - 這樣你可以清除一個特定的結果緩存:

$query->setResultCacheId('my_custom_id'); 
// or shorter notation with lifetime option 
$query->useResultCache(true, 3600, 'my_custom_id'); 

// to delete cache 
$cacheDriver = $entityManager->getConfiguration()->getResultCacheImpl(); 
$cacheDriver->delete('my_custom_id'); 
// to delete all cache entries 
$cacheDriver->deleteAll(); 

有關刪除緩存的詳細信息,請參閱:
http://docs.doctrine-project.org/en/latest/reference/caching.html#deleting

+0

太棒了!謝謝。完美的作品! – Adam 2013-03-21 23:53:26