Previous topic

Next topic

6.1. Introduction

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 convenience: Output,
File, Function and Class.

Example 6.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.

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 6.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.

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).

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 browser or console.

Note

When using Zend_Cache, pay attention to the important cache
identifier (passed to save() and start()).
It must be unique for every resource you cache, otherwise unrelated cache records may wipe
each other or, even worse, be displayed in place of the other.