2013-08-28 1 views
2

Насколько я могу понять, похоже, это способ настроить Memcached и установить TTL и пространство имен, но они не имеют никакого эффекта в кеше. Ключ не имеет префикса с пространством имен, а истечение - бесконечно.Установите ttl и пространство имен, используя Memcached в Zend Framework 2

$MemcachedOptions = new \Zend\Cache\Storage\Adapter\MemcachedOptions(); 
    $MemcachedResourceManager = new \Zend\Cache\Storage\Adapter\MemcachedResourceManager(1, new \Zend\Cache\Storage\Adapter\Memcached()); 
    $MemcachedResourceManager->addServer(1, array('localhost', 11211)); 
    $MemcachedOptions->setResourceManager($MemcachedResourceManager); 

    $MemcachedOptions->setNamespace('FooBar_'); 
    $MemcachedOptions->setTtl(10); 

    $cache = $MemcachedOptions->getResourceManager()->getResource(1); 
    $cache->set('foobar_key','I am in cache'); 

У кого-нибудь есть подсказки, подсказки? Любая помощь приветствуется.

ответ

9

MemcachedResourceManager работает по-другому, пытаясь его использовать.

Вы должны инициализировать его, как следующее:

// init a memcached resource manager with one native memcached resource 
// using resource id "1" 
$MemcachedResourceManager = new \Zend\Cache\Storage\Adapter\MemcachedResourceManager(); 
$MemcachedResourceManager->addServer('1', array('localhost', 11211)); 

// init a memcached storage adapter 
// using the native memcached resource of id "1" 
// configure it with a ttl and a namespace 
$cache = \Zend\Cache\StorageFactory::adapterFactory('memcached', array(
    'resource_manager' => $MemcachedResourceManager, 
    'resource_id'  => '1', 
    'namespace'  => 'FooBar_', 
    'ttl'    => 10, 
)); 

// or 
$memcachedAdapterOptions = new \Zend\Cache\Storage\Adapter\MemcachedOptions(array(
    'resource_manager' => $MemcachedResourceManager, 
    'resource_id'  => '1', 
    'namespace'  => 'FooBar_', 
    'ttl'    => 10, 
)); 
$cache = new \Zend\Cache\Storage\Adapter\Memcached($memcachedAdapterOptions); 

Как классы работают вместе:

Самый важный класс Zend\Cache\Storage\Adapter\Memcached это обертка для нативного экземпляра Memcached используется в контексте от Zend\Cache\StorageInterface.

Этот адаптер для хранения имеет ряд опций, которые определены как Zend\Cache\Storage\Adapter\MemcachedOptions.

Поскольку адаптеры кеш-памяти в ZF2 предназначены для обработки предметов одного типа для хранения, вам нужны разные экземпляры Zend\Cache\Storage\Adapter\Memcached для разных типов товаров. Но вы не хотите использовать разные подключения к memcached (другой экземпляр родного класса Memcached) - это были Zend\Cache\Storage\Adapter\MemcachedResourceManager.

Zend\Cache\Storage\Adapter\MemcachedResourceManager обрабатывает собственные экземпляры Memcached, которые будут использоваться Zend\Cache\Storage\Adapter\Memcached.

+0

Отлично! Это работает (сменил namesapce на пространство имен). Спасибо за два пути, которые помогают моему пониманию. – Roland

+0

Пытается размахивать «разными экземплярами .. \ Memcached для разных типов предметов». Что такое «элементы» в этом контексте и зачем вам нужен другой экземпляр Memcached? На заводе-изготовителе всегда будет использоваться тот же экземпляр (если вы не скажете об этом иначе) ... нет? – Roland

+0

'' различные экземпляры .. \ Memcached для разных типов элементов': одним типом элемента могут быть пользователи, а другой тип может быть продуктом. Каждый из них хотел бы иметь настроенное другое пространство ttl/namespace. Если вам не нравится изменять конфигурацию перед сохранением или чтением элемента, вам нужны разные экземпляры. PS: 'Zend \ Cache \ StorageFactory'' не использует экземпляры - он создает новый экземпляр для каждого вызова. –

 Смежные вопросы

  • Нет связанных вопросов^_^