2011-12-09 90 views
2

所以,我遇到了一個問題,一個引擎上有五個域,引擎使用Doctrine 1.2 ORM,所有查詢都使用memcache緩存(Doctrine_Cache_Memcache)。如何爲每個域創建關鍵字的前綴並通過domainprefix_key從緩存獲取?謝謝。使用Memcache和Doctrine 1.2進行多域緩存

回答

3

您可以創建衍生產品,擴展或編寫Doctrine_Cache_Memcache。在衍生產品中,您只需在將執行前傳遞給Doctrine_Cache_Memcache前加上密鑰的域部分即可修改id

下面是一個考慮使用繼承的例子,覆蓋了_doSave方法;其他公衆成員可以以類似的方式被覆蓋。

<?php 
class DomainCache extends Doctrine_Cache_Memcache 
{ 
    private function _getDomain() 
    { 
     // this could pull from config, a database, it 
     // could even be hardcoded on a per-project basis - YMMV! 
    } 

    /** 
    * Given the normal id the application would use, prefix 
    * it with the appropriate domain. 
    */ 
    private function _getDomainId($id) 
    { 
     return $this->_getDomain() . '_' . $id; 
    } 

    /** 
    * Save a cache record directly. This method is implemented by the cache 
    * drivers and used in Doctrine_Cache_Driver::save(). 
    * Overridden such that a domain-specific key is used. 
    * 
    * @param string $id  cache id 
    * @param string $data  data to cache 
    * @param int $lifeTime  if != false, set a specific lifetime for this 
    *       cache record (null => infinite lifeTime) 
    * @return boolean true if no problem 
    */ 
    protected function _doSave($id, $data, $lifeTime = false) 
    { 
     return parent::_doSave($this->_getDomainId($id), $data, $lifeTime); 
    } 
} 

如果你有興趣撰寫Doctrine_Cache_Memcache例如,假設你想延長一切爲實際工作_getDomain,你將實現Doctrine_Class_Interface代替。