There are three key concepts in Zend_Cache. One is the unique indentifier (a string) that is used
to identify cache records. The second one is the 'lifetime'
directive as seen in the
examples; it defines for how long the cached resource is considered 'fresh'. The third key concept
is conditional execution so that parts of your code can be skipped entirely, boosting performance.
The main frontend function (eg. Zend_Cache_Core::get()
) is always designed to return
false for a cache miss if that makes sense for the nature of a frontend. That enables end-users to
wrap parts of the code they would like to cache (and skip) in if(){ ... }
statements where
the condition is a Zend_Cache method itself. On the end if these blocks you must save what you've
generated, however (eg. Zend_Cache_Core::save()
).
Note | |
---|---|
The conditional execution design of your generating code is not necessary in some frontends
( |
Note | |
---|---|
'Cache hit' is a term for a condition when a cache record is found, is valid and is 'fresh' (in other words hasn't expired yet). 'Cache miss' is everything else. When a cache miss happens, you must generate your data (as you would normally do) and have it cached. When you have a cache hit, on the other hand, the backend automatically fetches the record from cache transparently. |
A good way to build a usable instance of a Zend_Cache
Frontend is given
in the following example :
<?php # We "load" the Zend_Cache factory require 'Zend/Cache.php'; # We choose a backend (for example 'File' or 'Sqlite'...) $backendName = '[...]'; # We choose a frontend (for example 'Core', 'Output', 'Page'...) $frontendName = '[...]'; # We set an array of options for the choosen frontend $frontendOptions = array([...]); # We set an array of options for the choosen backend $backendOptions = array([...]); # We make the good instance # (of course, the two last arguments are optional) $cache = Zend_Cache::factory($frontendName, $backendName, $frontendOptions, $backendOptions); ?>
In the following examples we will assume that the $cache
variable holds a
valid, instantiated frontend as shown and that you understand how to pass parametres
to your chosen backends.
Note | |
---|---|
Always use |
Tags are a way to categorize cache records. When you save a cache with the save()
method, you can set an array of tags to apply for this record. Then you will be
able to clean all cache records tagged with a given tag (or tags):
<?php $cache->save($huge_data, 'myUniqueID', array('tagA', 'tagB', 'tagC')); ?>
Note | |
---|---|
note than the |
To remove/invalidate in particular cache id, you can use the remove()
method :
<?php $cache->remove('idToRemove'); ?>
To remove/invalidate several cache ids in one operation, you can use the clean()
method. For example to remove all cache records :
<?php // clean all records $cache->clean(Zend_Cache::CLEANING_MODE_ALL); // clean only outdated $cache->clean(Zend_Cache::CLEANING_MODE_OLD); ?>
If you want to remove cache entries matching the tags 'tagA' and 'tagC':
<?php $cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('tagA', 'tagC')); ?>
Available cleaning modes are: CLEANING_MODE_ALL
, CLEANING_MODE_OLD
,
CLEANING_MODE_MATCHING_TAG
and CLEANING_MODE_NOT_MATCHING_TAG
. The
latter are, as their names suggest, combined with an array of tags in cleaning operations.