XCache Cache Handler:

Bei diesem Joomla Hack handelt es sich um einen Cache Handler für das Joomla 1.5 Framework, welcher auf die XCache Erweiterung aufsetzt. Diese Erweiterung speichert kompilierte OPCode Array's in einem Shared Memory Segment und erzielt dadurch einen sehr hohen Performance Gewinn. Auch bietet diese Erweiterung eine kleine Api um benutzerdefinierte Inhalte zu lesen, schreiben und zu löschen.

Der XCache Cache Storage Hanlder hat Einzug in das offizelle Joomla SVN Repository gefunden. Somit muss man ihn nicht mehr installieren. Bei der offizellen ersten stable Version von 1.5 ist er mit dabei.

Hier der Quellcode:

<?php
/**
* @version $id:$
* @package Joomla.Framework
* @subpackage Cache
* @copyright Copyright (C) 2005 - 2007 Open Source Matters. All rights reserved.
* @license GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*/
// Check to ensure this file is within the rest of the framework
defined('JPATH_BASE') or die();
/**
* Xcache cache storage handler
*
* @author Axel Sauerhöfer <axel[at]willcodejoomlaforfood[dot]de>
>
* @package Joomla.Framework
* @subpackage Cache
* @since 1.5
*/
class JCacheStorageXCache extends JCacheStorage
{
/**
* Constructor
*
* @access protected
* @param array $options optional parameters
*/
function __construct( $options = array() )
{
parent::__construct($options);
$config =& JFactory::getConfig();
$this->_hash = $config->getValue('config.secret');

}
/**
* Get cached data from xcache by id and group
*
* @access public
* @param string $id The cache data id
* @param string $group The cache data group
* @param boolean $checkTime True to verify cache time expiration threshold
* @return mixed Boolean false on failure or a cached data string
* @since 1.5
*/
function get($id, $group, $checkTime)
{
$cache_id = $this->_getCacheId($id, $group);
//check if id exists
if( !xcache_isset( $cache_id ) ){
return false;
}
$this->_setExpire($cache_id);
return xcache_get($cache_id);
}
/**
* Store the data to xcache by id and group
*
* @access public
* @param string $id The cache data id
* @param string $group The cache data group
* @param string $data The data to store in cache
* @return boolean True on success, false otherwise
* @since 1.5
*/
function store($id, $group, $data)
{
$cache_id = $this->_getCacheId($id, $group);
xcache_set($cache_id.'_expire', time() );
return xcache_set($cache_id, $data, $this->_lifetime);
}
/**
* Remove a cached data entry by id and group
*
* @access public
* @param string $id The cache data id
* @param string $group The cache data group
* @return boolean True on success, false otherwise
* @since 1.5
*/
function remove($id, $group)
{
$cache_id = $this->_getCacheId($id, $group);
if( !xcache_isset( $cache_id ) ){
return true;
}
return xcache_unset($cache_id);
}
/**
* Test to see if the cache storage is available.
*
* @static
* @access public
* @return boolean True on success, false otherwise.
*/
function test()
{
return (extension_loaded('xcache') && function_exists('xcache_set'));
}
/**
* Set expire time on each call since memcache sets it on cache creation.
*
* @access private
*
* @param string $key Cache key to expire.
* @param integer $lifetime Lifetime of the data in seconds.
*/
function _setExpire($key)
{
$lifetime = $this->_lifetime;
$expire = xcache_get($key.'_expire');
// set prune period
if ($expire + $lifetime < time()) {
xcache_unset($key);
xcache_unset($key.'_expire');
} else {
xcache_set($key.'_expire', time());
}
}
/**
* Get a cache_id string from an id/group pair
*
* @access private
* @param string $id The cache data id
* @param string $group The cache data group
* @return string The cache_id string
* @since 1.5
*/
function _getCacheId($id, $group)
{
$name = md5($this->_application.'-'.$id.'-'.$this->_hash.'-'.$this->_language);
return 'cache_'.$group.'-'.$name;
}
}

Download:

http://www.willcodejoomlaforfood.de/downloads/xcache_cache_storage_handler.tar.gz