2011-10-31 96 views
2

我正在嘗試使用Oracle處理memcache查詢/結果緩存。它完美地對付mysql(用memcached控制檯驗證:./memcached -u nobody -m 40 -vv)。下面是在網絡/ index.php文件:獲取symfony查詢和結果緩存來對付Oracle 11g

$servers = array(
    'host' => 'localhost', 
    'port' => 11211, 
    'persistent' => false 
); 

$cacheDriver = new Doctrine_Cache_Memcache(array(
    'servers' => $servers, 
    'compression' => false, 
    'prefix' => 'qc-') 
); 
$manager = Doctrine_Manager::getInstance(); 
$manager->setAttribute(Doctrine::ATTR_QUERY_CACHE, $cacheDriver); 
$manager->setAttribute(Doctrine::ATTR_RESULT_CACHE, $cacheDriver); 
$manager->setAttribute(Doctrine_Core::ATTR_RESULT_CACHE_LIFESPAN, 3600); 

這工作像預想的那樣對MySQL,但失敗在這裏我用的第一個位置下面的消息 - > useResultCache(真):

結果緩存驅動程序未初始化。

有沒有人知道發生了什麼和/或是否需要其他配置才能使用Oracle DB後端?

謝謝。

+0

如果您使用的var_dump()上'學說:: ATTR_RESULT_CACHE'修改'主義/ Connection.php', 1320行的'$ this-> getAttribute(Doctrine_Core :: ATTR_QUERY_CACHE)'和'$ this-> attributes'是什麼打印的? – greg0ire

+0

$ this-> getAttribute(Doctrine_Core :: ATTR_QUERY_CACHE)爲NULL,Doctrine :: ATTR_RESULT_CACHE爲「150」。我無法獲得$ this->屬性上的var_dump,因爲每次我嘗試在任何symfony對象上使用var_dump都會發生。我發現一個循環遍歷491行的那些值並在那裏添加了回顯語句,因此打印出的鍵值對是: 16 => oracle 8 => 0 3 => 2 這有幫助嗎?謝謝! – dsomnus

+0

哦,我剛剛注意到我要求你檢查'Doctrine/Connection.php'類,並且在你的代碼中,你設置了'Manager'的屬性。所以,我猜測問題是管理器設置沒有傳遞給連接,這是正常的行爲。如果您找不到原因,可以嘗試直接設置連接的屬性。請參閱[關於配置級別的這一節](http://www.doctrine-project.org/documentation/manual/1_2/hu/configuration#levels-of-configuration) – greg0ire

回答

2

你應該嘗試設置你的YOUR_APPConfiguration類中那些經理屬性喜歡這裏解釋:http://www.funstaff.ch/2009/03/19/le-cache-de-resultat-avec-doctrine

class frontendConfiguration extends sfApplicationConfiguration 
{ 
    public function configureDoctrine(Doctrine_Manager $manager) 
    { 
    $servers = array(
     'host' => 'localhost', 
     'port' => 11211, 
     'persistent' => false 
    ); 

    $cacheDriver = new Doctrine_Cache_Memcache(array(
     'servers' => $servers, 
     'compression' => false, 
     'prefix' => 'qc-') 
    ); 
    $manager->setAttribute(Doctrine_Core::ATTR_QUERY_CACHE, $cacheDriver); 
    $manager->setAttribute(Doctrine_Core::ATTR_QUERY_CACHE_LIFESPAN, 3600); 
    $manager->setAttribute(Doctrine_Core::ATTR_RESULT_CACHE, $cacheDriver); 
    $manager->setAttribute(Doctrine_Core::ATTR_RESULT_CACHE_LIFESPAN, 3600); 
    } 
} 
+0

太棒了,這很有效!謝謝一堆! – dsomnus