added apc and memcache Smarty support
This commit is contained in:
parent
f0a2781682
commit
60e15aaaac
91
bundled-libs/Smarty/libs/plugins/cacheresource.memcache.php
Normal file
91
bundled-libs/Smarty/libs/plugins/cacheresource.memcache.php
Normal 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();
|
||||
}
|
||||
}
|
@ -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
|
||||
|
||||
|
@ -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')) {
|
||||
|
@ -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....
|
||||
|
Loading…
x
Reference in New Issue
Block a user