Более одной конфигурации Zend_Cache?

Можно ли иметь два разных экземпляра кеша для Zend_Cache? Например, если бы я хотел иметь набор файлов, которые сохраняются навсегда, если я не удаляю их, и другой набор, который становится недействительным каждую минуту - могу ли я это сделать?

Куда бы я ни посмотрел, я всегда вижу только одну конфигурацию внешнего интерфейса и бэкэнда.

Спасибо!

2 ответа

Решение

Вы просто создаете два разных экземпляра Zend_Cache и вставляете их где-нибудь под рукой. Однажды я сделал что-то подобное, создав экземпляры кэша в boostrap и просто вставив их в реестр, например:

protected function _initCache(){
    $this->bootstrap('config');
    $config = Zend_Registry::get('config')->myapp->cache;

    $cache = Zend_Cache::factory(
      $config->frontend->name,
      $config->backend->name,
      $config->frontend->opts->toArray(),
      $config->backend->opts->toArray()
    );
    Zend_Registry::set('cache',$cache);
    return $cache;
  }

  protected function _initUserCache(){
    $this->bootstrap('config');
    $config = Zend_Registry::get('config')->myapp->othercache;

    $cache = Zend_Cache::factory(
      $config->frontend->name,
      $config->backend->name,
      $config->frontend->opts->toArray(),
      $config->backend->opts->toArray()
    );
    Zend_Registry::set('othercache',$cache);
    return $cache;

  }

Таким образом, в дизайне Zend_Cache нет ничего, что ограничивало бы количество различных кэшей, которые вы можете иметь. Вы можете настроить их все независимо, используя любой интерфейс и сервер, который вам нравится.

Вы можете использовать ресурс cachemanager, например:

resources.cachemanager.foo.frontend.name = Core
resources.cachemanager.foo.frontend.options.lifetime = 300
resources.cachemanager.foo.frontend.options.automatic_serialization = true
resources.cachemanager.foo.frontend.options.cache_id_prefix = some_prefix
resources.cachemanager.foo.backend.name = Memcached
resources.cachemanager.foo.backend.options.lifetime = 300

"foo" - это ключ кеша, вы можете указать сколько угодно.

Затем я помещаю cachemanager в Zend_Registry (в Bootstrap)

protected function _initCache()
{
        Zend_Registry::set('Zend_Caches', $this->bootstrap('cachemanager')
                                               ->getPluginResource('cachemanager')
                                               ->getCacheManager());
}

Использование (везде)

Zend_Registry::get('Zend_Caches')->foo
Другие вопросы по тегам