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
Methods summary
protected static
|
|
public static
none
|
|
public static
none
|
#
pick_backend( string $name, string $for, integer $priority = 1 )
Pick a named cache backend for a particular named cache |
public static
|
#
set_cache_lifetime( string $for, integer $lifetime = 600, integer $priority = 1 )
Set the cache lifetime for a particular named cache |
public static
The
|
Magic methods summary
Properties summary
protected static
array
|
$backends | |
protected static
array
|
$backend_picks | |
protected static
array
|
$cache_lifetime |