Blame | Last modification | View Log | RSS feed
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');/*** CodeIgniter** An open source application development framework for PHP 4.3.2 or newer** @package CodeIgniter* @author ExpressionEngine Dev Team* @copyright Copyright (c) 2006 - 2012 EllisLab, Inc.* @license http://codeigniter.com/user_guide/license.html* @link http://codeigniter.com* @since Version 2.0* @filesource*/// ------------------------------------------------------------------------/*** CodeIgniter Memcached Caching Class** @package CodeIgniter* @subpackage Libraries* @category Core* @author ExpressionEngine Dev Team* @link*/class CI_Cache_memcached extends CI_Driver {private $_memcached; // Holds the memcached objectprotected $_memcache_conf = array('default' => array('default_host' => '127.0.0.1','default_port' => 11211,'default_weight' => 1));// ------------------------------------------------------------------------/*** Fetch from cache** @param mixed unique key id* @return mixed data on success/false on failure*/public function get($id){$data = $this->_memcached->get($id);return (is_array($data)) ? $data[0] : FALSE;}// ------------------------------------------------------------------------/*** Save** @param string unique identifier* @param mixed data being cached* @param int time to live* @return boolean true on success, false on failure*/public function save($id, $data, $ttl = 60){if (get_class($this->_memcached) == 'Memcached'){return $this->_memcached->set($id, array($data, time(), $ttl), $ttl);}else if (get_class($this->_memcached) == 'Memcache'){return $this->_memcached->set($id, array($data, time(), $ttl), 0, $ttl);}return FALSE;}// ------------------------------------------------------------------------/*** Delete from Cache** @param mixed key to be deleted.* @return boolean true on success, false on failure*/public function delete($id){return $this->_memcached->delete($id);}// ------------------------------------------------------------------------/*** Clean the Cache** @return boolean false on failure/true on success*/public function clean(){return $this->_memcached->flush();}// ------------------------------------------------------------------------/*** Cache Info** @param null type not supported in memcached* @return mixed array on success, false on failure*/public function cache_info($type = NULL){return $this->_memcached->getStats();}// ------------------------------------------------------------------------/*** Get Cache Metadata** @param mixed key to get cache metadata on* @return mixed FALSE on failure, array on success.*/public function get_metadata($id){$stored = $this->_memcached->get($id);if (count($stored) !== 3){return FALSE;}list($data, $time, $ttl) = $stored;return array('expire' => $time + $ttl,'mtime' => $time,'data' => $data);}// ------------------------------------------------------------------------/*** Setup memcached.*/private function _setup_memcached(){// Try to load memcached server info from the config file.$CI =& get_instance();if ($CI->config->load('memcached', TRUE, TRUE)){if (is_array($CI->config->config['memcached'])){$this->_memcache_conf = NULL;foreach ($CI->config->config['memcached'] as $name => $conf){$this->_memcache_conf[$name] = $conf;}}}$this->_memcached = new Memcached();foreach ($this->_memcache_conf as $name => $cache_server){if ( ! array_key_exists('hostname', $cache_server)){$cache_server['hostname'] = $this->_default_options['default_host'];}if ( ! array_key_exists('port', $cache_server)){$cache_server['port'] = $this->_default_options['default_port'];}if ( ! array_key_exists('weight', $cache_server)){$cache_server['weight'] = $this->_default_options['default_weight'];}$this->_memcached->addServer($cache_server['hostname'], $cache_server['port'], $cache_server['weight']);}}// ------------------------------------------------------------------------/*** Is supported** Returns FALSE if memcached is not supported on the system.* If it is, we setup the memcached object & return TRUE*/public function is_supported(){if ( ! extension_loaded('memcached')){log_message('error', 'The Memcached Extension must be loaded to use Memcached Cache.');return FALSE;}$this->_setup_memcached();return TRUE;}// ------------------------------------------------------------------------}// End Class/* End of file Cache_memcached.php *//* Location: ./system/libraries/Cache/drivers/Cache_memcached.php */