是否可以有两个不同的缓存实例Zend_Cache
?例如,如果我想拥有一组永久存储的文件,除非我删除它们,而另一组每分钟都会失效——我可以这样做吗?
在我所见的任何地方,我总是看到只使用一个前端和后端配置。
谢谢!
是否可以有两个不同的缓存实例Zend_Cache
?例如,如果我想拥有一组永久存储的文件,除非我删除它们,而另一组每分钟都会失效——我可以这样做吗?
在我所见的任何地方,我总是看到只使用一个前端和后端配置。
谢谢!
您只需创建两个不同的 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”是缓存键,你可以指定任意多个。
接下来我将缓存管理器放入 Zend_Registry(在 Bootstrap 中)
protected function _initCache()
{
Zend_Registry::set('Zend_Caches', $this->bootstrap('cachemanager')
->getPluginResource('cachemanager')
->getCacheManager());
}
使用情况(无处不在)
Zend_Registry::get('Zend_Caches')->foo