我有一個存儲庫,我試圖設置結果緩存。我只能在網上找到一個例子來說明如何做到這一點......但是當我在我的一個存儲庫中實現這個例子時,我得到一個錯誤。 我正在使用APC進行緩存,並啓用了查詢緩存以在我的config.yml文件中使用APC。我分配512M到APC及其只能用50M當前(這個23M是這個單失敗的緩存條目)如何在symfony2存儲庫中指定查詢結果緩存?
這裏是倉庫代碼我有:
class AchievementRepository extends EntityRepository
{
function findAchievementsByCategory($categoryObj)
{
$em=$this->getEntityManager()->createQuery("SELECT a FROM FTWGuildBundle:Achievement a where a.category=:category order by a.title")
->setParameter('category',$categoryObj);
$em->useResultCache(true,3600,'findAchievementsByCategory');
$result=$em->getResult();
return $result;
}
}
,這是執行的時候,我得到以下錯誤
Notice: apc_store() [<a href='function.apc-store'>function.apc-store</a>]: "type" returned as member variable from __sleep() but does not exist in /data/www/ftw2/Symfony/vendor/doctrine-common/lib/Doctrine/Common/Cache/ApcCache.php line 80
當我看着我的apc.php文件,看看有什麼緩存,我發現與
儲值用戶高速緩存段我的緩存條目任何人都可以爲我提供一些方向,我哪裏出了問題?
這個實體中有許多列是ManyToOne,我需要禁用這個查詢的延遲加載這個工作嗎?如果是這樣......怎麼樣? 編輯:我啓用渴望負荷加入,取=「急不可耐」我的多對一的映射......沒有蘋果:(
編輯#2:ANSWERED - 工作類代碼(注意,實體類的所有屬性(成就)已更改爲保護)
class AchievementRepository extends EntityRepository
{
function findAchievementsByCategory($categoryObj)
{
$em=$this->getEntityManager()->createQuery("SELECT a FROM FTWGuildBundle:Achievement a where a.category=:category order by a.title")
->setParameter('category',$categoryObj);
$em->useResultCache(true,3600,'findAchievementsByCategory');
$result=$em->getArrayResult();
return $result;
}
}
謝謝!我更新了使用受保護的屬性,並將getResult()更改爲getArrayResult(),現在它可以正確緩存。 – Chris 2012-07-06 14:51:50
@Chris,你是如何測試結果是否被緩存的? – cbacelar 2014-02-21 20:01:12
@cbacelar - 幾種方法 1)使用查詢調試器,呈現頁面並查看運行了多少個查詢和哪些查詢。你會在這裏看到你的非緩存查詢。刷新頁面,你會看到緩存的查詢沒有執行。 2)檢查緩存中的統計信息(memcached,apc等)以查看緩存中是否有更多數據或更多記錄。 APC有一個很好的界面,你可以安裝它來讓你查看緩存中的每個實體(包括鍵,值和統計) – Chris 2014-02-22 00:05:34