1
0

added apc and memcache Smarty support

This commit is contained in:
Ian
2014-06-13 16:07:32 +02:00
parent f0a2781682
commit 60e15aaaac
4 changed files with 112 additions and 2 deletions

View File

@ -0,0 +1,91 @@
<?php
/**
* Memcache CacheResource for Smarty 3.1
*
* CacheResource Implementation based on the KeyValueStore API to use
* memcache as the storage resource for Smarty's output caching.
*
* Note that memcache has a limitation of 256 characters per cache-key.
* To avoid complications all cache-keys are translated to a sha1 hash.
*
* @package CacheResource-examples
* @author Rodney Rehm
*/
class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore {
/**
* memcache instance
* @var Memcache
*/
protected $memcache = null;
public function __construct()
{
$this->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();
}
}

View File

@ -3,6 +3,14 @@
Version 2.0-beta3 () 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 * Support added in serendipity_db_schema_import for sqlite
autoincrement autoincrement

View File

@ -905,6 +905,10 @@ function serendipity_smarty_init($vars = array()) {
@define('SMARTY_RESOURCE_CHAR_SET', LANG_CHARSET); @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 // Default Smarty Engine will be used
@define('SMARTY_DIR', S9Y_PEAR_PATH . 'Smarty/libs/'); @define('SMARTY_DIR', S9Y_PEAR_PATH . 'Smarty/libs/');
if (!class_exists('Smarty')) { if (!class_exists('Smarty')) {

View File

@ -168,8 +168,15 @@ class Serendipity_Smarty extends Smarty
*/ */
// enable for APC in-memory (RAM) storage caching - must be enabled in PHP // enable for APC in-memory (RAM) storage caching - must be enabled in PHP
#apc-cache# $this->addPluginsDir ( SMARTY_DIR . 'plugins/' ); if(APC_EXTENSION_LOADED && !$serendipity['disable_apc']) {
#apc-cache# $this->caching_type = 'apc'; //$this->setCachingType ( '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.... Caching is disabled, as long as we haven't figured out on how to use it best here....