Available Languages
Manual for Zend Framework 1.0.3
Table of Contents
Zend_Cache provides a generic way to cache any data.
Caching in Zend Framework is operated by frontends while cache records are stored through backend adapters
(File, Sqlite, Memcache...) through a flexible
system of IDs and tags. Using those, it is easy to delete specific types of records afterwards
(for example: "delete all cache records marked with a given tag").
The core of the module (Zend_Cache_Core) is generic, flexible and configurable.
Yet, for your specific needs there are cache frontends that extend Zend_Cache_Core
for convinience: Output, File, Function and Class.
Example 4.1. Getting a frontend with Zend_Cache::factory()
Zend_Cache::factory() instantiates correct objects and ties them together.
In this first example, we will use Core frontend together with File
backend.
<?php
require_once 'Zend/Cache.php';
$frontendOptions = array(
'lifetime' => 7200, // cache lifetime of 2 hours
'automatic_serialization' => true
);
$backendOptions = array(
'cache_dir' => './tmp/' // Directory where to put the cache files
);
// getting a Zend_Cache_Core object
$cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);
![]() |
Frontends and Backends consisting of multiple words |
|---|---|
Some frontends and backends are named using multiple words, such as 'ZendPlatform'. When specifying them to the factory, separate them using a word separator, such as a space (' '), hyphen ('-'), or period ('.'). |
Example 4.2. Caching a database query result
Now that we have a frontend, we can cache any type of data (we turned on serialization). For example, we can cache a result from a very expensive database query. After it is cached, there is no need to even connect to the database; records are fetched from cache and unserialized.
<?php
// $cache initialized in previous example
// see if a cache already exists:
if(!$result = $cache->load('myresult')) {
// cache miss; connect to the database
$db = Zend_Db::factory( [...] );
$result = $db->fetchAll('SELECT * FROM huge_table');
$cache->save($result, 'myresult');
} else {
// cache hit! shout so that we know
echo "This one is from cache!\n\n";
}
print_r($result);
Example 4.3. Caching output with Zend_Cache output frontend
We 'mark up' sections in which we want to cache output by adding some conditional logic,
encapsulating the section within start() and end() methods (this
resembles the first example and is the core strategy for caching).
Inside, output your data as usual - all output will be cached when execution hits the end()
method. On the next run, the whole section will be skipped in favor of fetching data from cache
(as long as the cache record is valid).
<?php
$frontendOptions = array(
'lifetime' => 30, // cache lifetime of half a minute
'automatic_serialization' => false // this is default anyway
);
$backendOptions = array('cache_dir' => './tmp/');
$cache = Zend_Cache::factory('Output', 'File', $frontendOptions, $backendOptions);
// we pass a unique identifier to the start() method
if(!$cache->start('mypage')) {
// output as usual:
echo 'Hello world! ';
echo 'This is cached ('.time().') ';
$cache->end(); // the output is saved and sent to the browser
}
echo 'This is never cached ('.time().').';
Notice that we output the result of time() twice; this is something dynamic
for demonstration purposes. Try running this and then refreshing several times; you will notice
that the first number doesn't change while second changes as time passes. That is because the first
number was output in the cached section and is saved among other output.
After half a minute (we've set lifetime to 30 seconds) the
numbers should match again because the cache record expired -- only to be cached again. You
should try this in your brower or console.
![]() |
Note |
|---|---|
When using Zend_Cache, pay attention to the important cache identifier (passed to |
Welcome!
Welcome to ZFResource - The Resource for the Zend Framework.
As you see, the website is in still in progress. Many features ( like Code Directory, Code Samples, User written Tutorials, Examples and News,...) will be online in near future.
At the moment, you can search and browse the manual in your language of
choice. Don't forget to come back later to benefit from the new features.
Help Wanted:
We are still searching for people want to help building this site. If you want to see this website in your language or you have any suggestions for this site please send us an email
![[Note]](images/note.png)
