2014-11-04 6 views
0

Я использую PHP Memcached &, когда я удаляю ключ, я все равно могу извлечь ключ. Что я могу делать неправильно?Php Memcached delete not working

function __construct() { 
    $this->_cache = array(); 

    // if we have memcache support, load it from CACHE_POOL 
    // 
    if (class_exists('Memcached')) { 
     $this->_mc = new Memcached('CACHE_POOL'); 
     $servers = $this->_mc->getServerList(); 
     if (empty($servers)) { 
      //This code block will only execute if we are setting up a new EG(persistent_list) entry 
      $this->_mc->setOption(Memcached::OPT_RECV_TIMEOUT, 1000); 
      $this->_mc->setOption(Memcached::OPT_SEND_TIMEOUT, 3000); 
      $this->_mc->setOption(Memcached::OPT_TCP_NODELAY, true); 
      $this->_mc->setOption(Memcached::OPT_PREFIX_KEY, "md_"); 
      $this->_mc->addServers(self::$_MEMCACHE_IPS); 
     } 

     $current_cache = $this->_mc->get(self::CACHE_KEY); 

     if ($current_cache) { 
      $this->_cache = array_merge($this->_cache, $current_cache); 
     } 
    } 

} 

    function delete($key) { 
     self::instance()->_mc->delete($key); 
    } 

    function getSafe($key) { 
     return isset($this->_cache[$key]) ? $this->_cache[$key] : FALSE; 
    } 

self::instance()->delete("test"); 
echo(self::instance()->getSafe("test")); 

После выполнения этого значения все еще возвращает значение. Не уверен, что здесь происходит.

+0

Что такое '$ this -> _ cache [$ key]' и как это связано с memcached? – Cheery

+1

Должен сказать ... Может быть, его кешировали? 8) – Digitalis

+0

Теперь, когда представлено больше кода - 'После выполнения этого, get все равно возвращает значение.' Потому что он берется из '$ this -> _ cache' и вы не очищаете его от' delete'. Или вы имеете в виду новый запрос к скрипту? – Cheery

ответ

1

Вы также должны удалить кэш из _cache собственности с точки зрения метода извлечения:

function delete($key) { 
    self::instance()->_mc->delete($key); 
    unset(self::instance()->_cache[$key]); 
} 

Но не применять эту конструкцию кода в производственной среде.

+0

это работает, но почему я не хочу применять этот код в производстве? – user2158382

+0

также как 'unset (self :: instance() -> _ cache [$ key]);' работает, но 'unset ($ current_cache [$ key]);' не работает? – user2158382