1 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
5 * An open source application development framework for PHP 4.3.2 or newer
8 * @author ExpressionEngine Dev Team
9 * @copyright Copyright (c) 2006 - 2011 EllisLab, Inc.
10 * @license http://codeigniter.com/user_guide/license.html
11 * @link http://codeigniter.com
16 // ------------------------------------------------------------------------
19 * CodeIgniter Memcached Caching Class
21 * @package CodeIgniter
22 * @subpackage Libraries
24 * @author ExpressionEngine Dev Team
28 class CI_Cache_memcached extends CI_Driver {
30 private $_memcached; // Holds the memcached object
32 protected $_memcache_conf = array(
34 'default_host' => '127.0.0.1',
35 'default_port' => 11211,
40 // ------------------------------------------------------------------------
45 * @param mixed unique key id
46 * @return mixed data on success/false on failure
48 public function get($id)
50 $data = $this->_memcached->get($id);
52 return (is_array($data)) ? $data[0] : FALSE;
55 // ------------------------------------------------------------------------
60 * @param string unique identifier
61 * @param mixed data being cached
62 * @param int time to live
63 * @return boolean true on success, false on failure
65 public function save($id, $data, $ttl = 60)
67 return $this->_memcached->add($id, array($data, time(), $ttl), $ttl);
70 // ------------------------------------------------------------------------
75 * @param mixed key to be deleted.
76 * @return boolean true on success, false on failure
78 public function delete($id)
80 return $this->_memcached->delete($id);
83 // ------------------------------------------------------------------------
88 * @return boolean false on failure/true on success
90 public function clean()
92 return $this->_memcached->flush();
95 // ------------------------------------------------------------------------
100 * @param null type not supported in memcached
101 * @return mixed array on success, false on failure
103 public function cache_info($type = NULL)
105 return $this->_memcached->getStats();
108 // ------------------------------------------------------------------------
113 * @param mixed key to get cache metadata on
114 * @return mixed FALSE on failure, array on success.
116 public function get_metadata($id)
118 $stored = $this->_memcached->get($id);
120 if (count($stored) !== 3)
125 list($data, $time, $ttl) = $stored;
128 'expire' => $time + $ttl,
134 // ------------------------------------------------------------------------
139 private function _setup_memcached()
141 // Try to load memcached server info from the config file.
142 $CI =& get_instance();
143 if ($CI->config->load('memcached', TRUE, TRUE))
145 if (is_array($CI->config->config['memcached']))
147 $this->_memcache_conf = NULL;
149 foreach ($CI->config->config['memcached'] as $name => $conf)
151 $this->_memcache_conf[$name] = $conf;
156 $this->_memcached = new Memcached();
158 foreach ($this->_memcache_conf as $name => $cache_server)
160 if ( ! array_key_exists('hostname', $cache_server))
162 $cache_server['hostname'] = $this->_default_options['default_host'];
165 if ( ! array_key_exists('port', $cache_server))
167 $cache_server['port'] = $this->_default_options['default_port'];
170 if ( ! array_key_exists('weight', $cache_server))
172 $cache_server['weight'] = $this->_default_options['default_weight'];
175 $this->_memcached->addServer(
176 $cache_server['hostname'], $cache_server['port'], $cache_server['weight']
181 // ------------------------------------------------------------------------
187 * Returns FALSE if memcached is not supported on the system.
188 * If it is, we setup the memcached object & return TRUE
190 public function is_supported()
192 if ( ! extension_loaded('memcached'))
194 log_message('error', 'The Memcached Extension must be loaded to use Memcached Cache.');
199 $this->_setup_memcached();
203 // ------------------------------------------------------------------------
208 /* End of file Cache_memcached.php */
209 /* Location: ./system/libraries/Cache/drivers/Cache_memcached.php */