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 ()
------------------------------------------------------------------------
* 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

View File

@ -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')) {

View File

@ -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....