/**
  * 构造方法
  *
  * @param array $options associative array of options
  * @throws RThink_Controller_Exception
  * @return void
  */
 public function __construct(array $options = array())
 {
     if (!extension_loaded('memcached')) {
         class_exists('RThink_Controller_Exception', false) || (require 'RThink/Controller/Exception.php');
         throw new RThink_Controller_Exception('memcached扩展没有加载!');
     }
     // override default client options
     $this->_options['client'] = array(Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT, Memcached::OPT_HASH => Memcached::HASH_MD5, Memcached::OPT_LIBKETAMA_COMPATIBLE => true);
     parent::__construct($options);
     if (isset($this->_options['servers'])) {
         $value = $this->_options['servers'];
         if (isset($value['host'])) {
             // in this case, $value seems to be a simple associative array (one server only)
             $value = array(0 => $value);
             // let's transform it into a classical array of associative arrays
         }
         $this->setOption('servers', $value);
     }
     $this->_memcache = new Memcached();
     // 配置memcached客户端操作项
     foreach ($this->_options['client'] as $name => $value) {
         $optId = null;
         if (is_int($name)) {
             $optId = $name;
         } else {
             $optConst = 'Memcached::OPT_' . strtoupper($name);
             if (defined($optConst)) {
                 $optId = constant($optConst);
             } else {
                 $this->_log("Unknown memcached client option '{$name}' ({$optConst})");
             }
         }
         if ($optId) {
             if (!$this->_memcache->setOption($optId, $value)) {
                 $this->_log("Setting memcached client option '{$optId}' failed");
             }
         }
     }
     // 配置memcached服务
     $servers = array();
     foreach ($this->_options['servers'] as $server) {
         if (!array_key_exists('port', $server)) {
             $server['port'] = self::DEFAULT_PORT;
         }
         if (!array_key_exists('weight', $server)) {
             $server['weight'] = self::DEFAULT_WEIGHT;
         }
         $servers[] = array($server['host'], $server['port'], $server['weight']);
     }
     $this->_memcache->addServers($servers);
 }
 /**
  * 构造方法
  *
  * @param array $options associative array of options
  * @throws RThink_Controller_Exception
  * @return void
  */
 public function __construct(array $options = array())
 {
     if (!extension_loaded('memcache')) {
         class_exists('RThink_Controller_Exception', false) || (require 'RThink/Controller/Exception.php');
         throw new RThink_Controller_Exception('memcache扩展没有加载!');
     }
     parent::__construct($options);
     $this->_memcache = new Memcache();
     //处理单台mecache服务器的参数的情况
     if (isset($this->_options['servers'])) {
         $value = $this->_options['servers'];
         if (isset($value['host'])) {
             //单台服务器的情况
             $value = array(0 => $value);
             // 构造memcache适配器需要的参数格式
         }
         $this->setOption('servers', $value);
     }
     foreach ($this->_options['servers'] as $server) {
         array_key_exists('port', $server) || ($server['port'] = self::DEFAULT_PORT);
         array_key_exists('persistent', $server) || ($server['persistent'] = self::DEFAULT_PERSISTENT);
         array_key_exists('weight', $server) || ($server['weight'] = self::DEFAULT_WEIGHT);
         array_key_exists('timeout', $server) || ($server['timeout'] = self::DEFAULT_TIMEOUT);
         array_key_exists('retry_interval', $server) || ($server['retry_interval'] = self::DEFAULT_RETRY_INTERVAL);
         array_key_exists('status', $server) || ($server['status'] = self::DEFAULT_STATUS);
         array_key_exists('failure_callback', $server) || ($server['failure_callback'] = self::DEFAULT_FAILURE_CALLBACK);
         if ($this->_options['compatibility']) {
             $this->_memcache->addServer($server['host'], $server['port'], $server['persistent'], $server['weight'], $server['timeout'], $server['retry_interval']);
         } else {
             $this->_memcache->addServer($server['host'], $server['port'], $server['persistent'], $server['weight'], $server['timeout'], $server['retry_interval'], $server['status'], $server['failure_callback']);
         }
     }
 }