diff --git a/bundled-libs/Smarty/libs/plugins/cacheresource.memcache.php b/bundled-libs/Smarty/libs/plugins/cacheresource.memcache.php new file mode 100644 index 00000000..cfb3f66b --- /dev/null +++ b/bundled-libs/Smarty/libs/plugins/cacheresource.memcache.php @@ -0,0 +1,91 @@ +memcache = new Memcache(); + $this->memcache->addServer( '127.0.0.1', 11211 ); + } + + /** + * Read values for a set of keys from cache + * + * @param array $keys list of keys to fetch + * @return array list of values with the given keys used as indexes + * @return boolean true on success, false on failure + */ + protected function read(array $keys) + { + $_keys = $lookup = array(); + foreach ($keys as $k) { + $_k = sha1($k); + $_keys[] = $_k; + $lookup[$_k] = $k; + } + $_res = array(); + $res = $this->memcache->get($_keys); + foreach ($res as $k => $v) { + $_res[$lookup[$k]] = $v; + } + return $_res; + } + + /** + * Save values for a set of keys to cache + * + * @param array $keys list of values to save + * @param int $expire expiration time + * @return boolean true on success, false on failure + */ + protected function write(array $keys, $expire=null) + { + foreach ($keys as $k => $v) { + $k = sha1($k); + $this->memcache->set($k, $v, 0, $expire); + } + return true; + } + + /** + * Remove values from cache + * + * @param array $keys list of keys to delete + * @return boolean true on success, false on failure + */ + protected function delete(array $keys) + { + foreach ($keys as $k) { + $k = sha1($k); + $this->memcache->delete($k); + } + return true; + } + + /** + * Remove *all* values from cache + * + * @return boolean true on success, false on failure + */ + protected function purge() + { + return $this->memcache->flush(); + } +} diff --git a/docs/NEWS b/docs/NEWS index f9fd6376..c8b1e336 100644 --- a/docs/NEWS +++ b/docs/NEWS @@ -3,6 +3,14 @@ Version 2.0-beta3 () ------------------------------------------------------------------------ + + * added experimental support for PHP/SMARTY IN MEMORY caching + Enabled by default, if classes found loaded. + Disable with + $serendipity['disable_apc'] = true; + and + $serendipity['disable_memcache'] = true; + * Support added in serendipity_db_schema_import for sqlite autoincrement diff --git a/include/functions_smarty.inc.php b/include/functions_smarty.inc.php index 3d07368e..b100ba1a 100644 --- a/include/functions_smarty.inc.php +++ b/include/functions_smarty.inc.php @@ -905,6 +905,10 @@ function serendipity_smarty_init($vars = array()) { @define('SMARTY_RESOURCE_CHAR_SET', LANG_CHARSET); } + // define cache resources to load with smarty - see smarty class + @define('APC_EXTENSION_LOADED', extension_loaded('apc') && ini_get('apc.enabled')); + @define('MEMCACHE_EXTENSION_LOADED', class_exists('Memcache',false) && extension_loaded("memcached")); + // Default Smarty Engine will be used @define('SMARTY_DIR', S9Y_PEAR_PATH . 'Smarty/libs/'); if (!class_exists('Smarty')) { diff --git a/include/serendipity_smarty_class.inc.php b/include/serendipity_smarty_class.inc.php index 944e283a..d904301c 100644 --- a/include/serendipity_smarty_class.inc.php +++ b/include/serendipity_smarty_class.inc.php @@ -168,8 +168,15 @@ class Serendipity_Smarty extends Smarty */ // enable for APC in-memory (RAM) storage caching - must be enabled in PHP - #apc-cache# $this->addPluginsDir ( SMARTY_DIR . 'plugins/' ); - #apc-cache# $this->caching_type = 'apc'; //$this->setCachingType ( 'apc' ); + if(APC_EXTENSION_LOADED && !$serendipity['disable_apc']) { + $this->addPluginsDir ( SMARTY_DIR . 'plugins/' ); + $this->caching_type = 'apc'; //$this->setCachingType ( 'apc' ); + } + // enable for MEMCACHE storage caching - must be enabled in PHP + if(MEMCACHE_EXTENSION_LOADED && !$serendipity['disable_memcache']) { + $this->addPluginsDir ( SMARTY_DIR . 'plugins/' ); + $this->caching_type = 'memcache'; //$this->setCachingType ( 'memcache' ); + } /* Caching is disabled, as long as we haven't figured out on how to use it best here....