Version: current

# Class SS_Cache

SS_Cache provides a bunch of static functions wrapping the Zend_Cache system in something a little more easy to use with the SilverStripe config system.

A Zend_Cache has both a frontend (determines how to get the value to cache, and how to serialize it for storage) and a backend (handles the actual storage).

Rather than require library code to specify the backend directly, cache consumers provide a name for the cache backend they want. The end developer can then specify which backend to use for each name in their project's _config.php. They can also use 'all' to provide a backend for all named caches

End developers provide a set of named backends, then pick the specific backend for each named cache. There is a default File cache set up as the 'default' named backend, which is assigned to 'all' named caches

USING A CACHE

$cache = SS_Cache::factory('foo') ; // foo is any name (try to be specific), and is used to get configuration & storage info

if (!($result = $cache->load($cachekey))) { $result = caluate some how; $cache->save($result); }

return $result;

Normally there's no need to remove things from the cache - the cache backends clear out entries based on age & maximum allocated storage. If you include the version of the object in the cache key, even object changes don't need any invalidation

DISABLING CACHING IN DEV MOVE

(in _config.php)

if (Director::isDev()) SS_Cache::set_cache_lifetime('any', -1, 100);

USING MEMCACHED AS STORE

(in _config.php)

SS_Cache::add_backend('primary_memcached', 'Memcached', array('host' => 'localhost', 'port' => 11211, 'persistent' => true, 'weight' => 1, 'timeout' => 5, 'retry_interval' => 15, 'status' => true, 'failure_callback' => '' ) );

SS_Cache::pick_backend('primary_memcached', 'any', 10); SS_Cache::pick_backend('default', 'aggregate', 20); // Aggregate needs a backend with tag support, which memcached doesn't provide

USING APC AND FILE AS TWO LEVEL STORE

(in _config.php)

SS_Cache::add_backend('two-level', 'TwoLevels' array( 'slow_backend' => 'File', 'fast_backend' => 'Apc', 'slow_backend_options' => array('cache_dir' => TEMP_FOLDER . DIRECTORY_SEPARATOR . 'cache') ));

SS_Cache::pick_backend('two-level', 'any', 10); // No need for special backend for aggregate - TwoLevels with a File slow backend supports tags

Package: sapphire\core
Author: hfried
Located at sapphire/cache/Cache.php

## Methods summary

`protected static` | # `init( )` Initialize the 'default' named cache backend Initialize the 'default' named cache backend
`public static none` | # `add_backend( string $name, string $type, array $options = array() )` Add a new named cache backend Add a new named cache backend #### Parameters $name string $name The name of this backend as a freeform string $type string $type The Zend_Cache backend ('File' or 'Sqlite' or ...) $options array $options The Zend_Cache backend options (see http://framework.zend.com/manual/en/zend.cache.html) #### Returns `none` none
`public static none` | # `pick_backend( string $name, string $for, integer $priority = 1 )` Pick a named cache backend for a particular named cache Pick a named cache backend for a particular named cache #### Parameters $name string $name The name of the backend, as passed as the first argument to add_backend $for string $for The name of the cache to pick this backend for (or 'any' for any backend) $priority integer $priority The priority of this pick - the call with the highest number will be the actual backend picked. A backend picked for a specific cache name will always be used instead of 'any' if it exists, no matter the priority. #### Returns `none` none
`public static` | # `set_cache_lifetime( string $for, integer $lifetime = 600, integer $priority = 1 )` Set the cache lifetime for a particular named cache Set the cache lifetime for a particular named cache #### Parameters $for string $for The name of the cache to set this lifetime for (or 'any' for all backends) $lifetime integer $lifetime The lifetime of an item of the cache, in seconds, or -1 to disable caching $priority integer $priority The priority. The highest priority setting is used. Unlike backends, 'any' is not special in terms of priority.
`public static The` | # `factory( string $for, string $frontend = 'Output', array $frontendOptions = null )` Build a cache object Build a cache object #### Parameters $for string $for The name of the cache to build the cache object for $frontend string $frontend (optional) The type of Zend_Cache frontend to use. Output is almost always the best $frontendOptions array $frontendOptions (optional) Any frontend options to use. #### Returns `The` cache object. It has been partitioned so that actions on the object won't affect cache objects generated with a different $for value, even those using the same Zend_Backend -- Cache a calculation if (!($result = $cache->load($cachekey))) { $result = caluate some how; $cache->save($result); } return $result; -- Cache captured output if (!($cache->start($cachekey))) { // output everything as usual echo 'Hello world! '; echo 'This is cached ('.time().') '; $cache->end(); // output buffering ends } -- Invalidate an element $cache->remove($cachekey); -- Clear the cache (warning - this clears the entire backend, not just this named cache partition) $cache->clean(Zend_Cache::CLEANING_MODE_ALL); See the Zend_Cache documentation at http://framework.zend.com/manual/en/zend.cache.html for more

### Magic methods summary

## Properties summary

`protected static array` | $backends | #
`protected static array` | $backend_picks | #
`protected static array` | $cache_lifetime | #

[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the Silverstripe Forums to ask development related questions. -