It's the nature of applications to require a multitude of caches of any
type often dependent on the controller, library or domain model being
accessed. To allow for a simple means of defining Zend_Cache
options in advance (such as from a bootstrap) so that accessing a cache
object requires minimum setup within the application source code, the
Zend_Cache_Manager
class was written. This class
is accompanied by Zend_Application_Resource_Cachemanager
ensuring bootstrap configuration is available and
Zend_Controller_Action_Helper_Cache
to allow simple
cache access and instantiation from controllers and other helpers.
The basic operation of this component is as follows. The Cache Manager allows users to setup
"option templates", basically options for a set of named caches. These can be set using the
method Zend_Cache_Manager::setCacheTemplate()
.
These templates do not give rise to a cache until the user attempts to retrieve
a named cache (associated with an existing option template) using the method
Zend_Cache_Manager::getCache()
.
$manager = new Zend_Cache_Manager; $dbCache = array( 'frontend' => array( 'name' => 'Core', 'options' => array( 'lifetime' => 7200, 'automatic_serialization' => true ) ), 'backend' => array( 'name' => 'Core', 'options' => array( 'cache_dir' => '/path/to/cache' ) ) ); $manager->setCacheTemplate('database', $dbCache); /** * Anywhere else where the Cache Manager is available... */ $databaseCache = $manager->getCache('database');
The Cache Manager also allows simple setting of pre-instantiated caches
using the method Zend_Cache_Manager::setCache()
.
$frontendOptions = array( 'lifetime' => 7200, 'automatic_serialization' => true ); $backendOptions = array( 'cache_dir' => '/path/to/cache' ); $dbCache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions); $manager = new Zend_Cache_Manager; $manager->setCache('database', $dbCache); /** * Anywhere else where the Cache Manager is available... */ $databaseCache = $manager->getCache('database');
If for any reason, you are unsure where the Cache Manager contains a
pre-instantiated cache or a relevant option cache template to create one
on request, you can check for the existence of a name cache configuration
or instance using the method Zend_Cache_Manager::hasCache()
.
$manager = new Zend_Cache_Manager; $dbCache = array( 'frontend' => array( 'name' => 'Core', 'options' => array( 'lifetime' => 7200, 'automatic_serialization' => true ) ), 'backend' => array( 'name' => 'Core', 'options' => array( 'cache_dir' => '/path/to/cache' ) ) ); $manager->setCacheTemplate('database', $dbCache); /** * Anywhere else where the Cache Manager is available... */ if ($manager->hasCache('database')) { $databaseCache = $manager->getCache('database'); } else { // create a cache from scratch if none available from Manager }
In some scenarios, you may have defined a number of general use caches
using Zend_Cache_Manager
but need to fine-tune
their options before use depending on the circumstances. You can edit
previously set cache templates on the fly before they are instantiated
using the method Zend_Cache_Manager::setTemplateOptions()
.
$manager = new Zend_Cache_Manager; $dbCache = array( 'frontend' => array( 'name' => 'Core', 'options' => array( 'lifetime' => 7200, 'automatic_serialization' => true ) ), 'backend' => array( 'name' => 'Core', 'options' => array( 'cache_dir' => '/path/to/cache' ) ) ); $manager->setCacheTemplate('database', $dbCache); /** * Anywhere else where the Cache Manager is available... * Here we decided to store some upcoming database queries to Memcached instead * of the preconfigured File backend. */ $fineTuning = array( 'backend' => array( 'name' => 'Memcached', 'options' => array( 'servers' => array( array( 'host' => 'localhost', 'port' => 11211, 'persistent' => true, 'weight' => 1, 'timeout' => 5, 'retry_interval' => 15, 'status' => true, 'failure_callback' => '' ) ) ) ) ); $manager->setTemplateOptions('database', $fineTuning); $databaseCache = $manager->getCache('database');
To assist in making the Cache Manager more useful, it is accompanied by
Zend_Application_Resource_Cachemanager
and also
the Zend_Controller_Action_Helper_Cache
Action
Helper. Both of these are described in their relevant areas of the
Reference Guide.
Out of the box, Zend_Cache_Manager
already includes
three pre-defined cache templates called "default", "page" and "pagetag".
The default cache is a simple File based cache using the Core frontend.
The remaining two caches are used to implement a default Static Page Cache
where static HTML, XML or even JSON
may be written to static files in /public
. Control over a Static Page
Cache is offered via Zend_Controller_Action_Helper_Cache
, though you
may alter the settings of this "page" the "pagetag" it uses to track tags using
Zend_Cache_Manager::setTemplateOptions()
or even
Zend_Cache_Manager::setCacheTemplate()
if overloading
all of their options.