diff --git a/src/Pluf/Cache/Apc.php b/src/Pluf/Cache/Apc.php new file mode 100644 index 0000000..923cc0c --- /dev/null +++ b/src/Pluf/Cache/Apc.php @@ -0,0 +1,96 @@ + + * $cfg['cache_engine'] = 'Pluf_Cache_Apc'; + * $cfg['cache_timeout'] = 300; + * $cfg['cache_apc_keyprefix'] = 'uniqueforapp'; + * $cfg['cache_apc_compress'] = true; + * + */ +class Pluf_Cache_Apc extends Pluf_Cache +{ + /** + * Prefix added to all the keys. + */ + private $keyprefix = ''; + + /** + * Auto compress the data to save memory against a performance + * loss. + */ + private $compress = false; + + /** + * Create the cache object and initialize it from the + * configuration. + */ + public function __construct() + { + $this->keyprefix = Pluf::f('cache_apc_keyprefix', ''); + $this->compress = Pluf::f('cache_apc_compress', false); + } + + /** + * Set a value in the cache. + * + * @param string Key to store the information + * @param mixed Value to store + * @param int Timeout in seconds (null) + * @return bool Success + */ + public function set($key, $value, $timeout=null) + { + if ($timeout == null) $timeout = Pluf::f('cache_timeout', 300); + $value = serialize($value); + if ($this->compress) $value = gzdeflate($value, 9); + return apc_store($this->keyprefix.$key, $value, $timeout); + } + + /** + * Get value from the cache. + * + * @param string Key to get the information + * @param mixed Default value to return if cache miss (null) + * @param mixed Stored value or default + */ + public function get($key, $default=null) + { + $success = false; + $value = apc_fetch($this->keyprefix.$key, &$success); + if (!$success) return $default; + if ($this->compress) $value = gzinflate($value); + return unserialize($value); + } +}