修改ThinkPHP缓存类 使支持Memcached类和Aliyun OCS

一、首先你要确定你的环境已经支持安装Memcached的客户端并已经能够连接阿里云的OCS。

二、找到ThinkPHP目录下的“/Extend/Driver/Cache/CacheMemcache.class.php”这个文件,另存一份在原来的目录,并命名为“CacheMemcached.class.php”,然后我们对“CacheMemcached.class.php”这个文件进行如下修改。

1.把该文件类的声明部分的“CacheMemcache”改为“CacheMemcached”,即“class CacheMemcached extends Cache{…}”;

2.修改构造函数(先贴代码,回头再作说明):

function __construct($options=array()) {
  if ( !extension_loaded('memcached') ) {
    throw_exception(L('_NOT_SUPPERT_').':memcached');
  }
 
  $options = array_merge(array (
    'host' => C('MEMCACHED_HOST') ? C('MEMCACHED_HOST') : '127.0.0.1',
    'port' => C('MEMCACHED_PORT') ? C('MEMCACHED_PORT') : '11211',
    'username' => C('MEMCACHED_USER') ? C('MEMCACHED_USER') : null,
    'password' => C('MEMCACHED_PWD') ? C('MEMCACHED_PWD') : null,
    'ocs' => C('MEMCACHED_OCS') ? C('MEMCACHED_OCS') : false,
    'timeout' => C('DATA_CACHE_TIMEOUT') ? C('DATA_CACHE_TIMEOUT') : false,
    'persistent' => false,
  ),$options);
 
  $this->options = $options;
  $this->options['expire'] = isset($options['expire'])? $options['expire'] : C('DATA_CACHE_TIME');
  $this->options['prefix'] = isset($options['prefix'])? $options['prefix'] : C('DATA_CACHE_PREFIX');
  $this->options['length'] = isset($options['length'])? $options['length'] : 0;
  $this->handler = new Memcached;
  if($options['persistent'] && $options['timeout'] !== false){
    $this->handler->setOption(Memcached::OPT_CONNECT_TIMEOUT,$options['timeout']);
  }
  //阿里云OCS
  if($options['ocs']){
    $this->handler->setOption(Memcached::OPT_COMPRESSION, false);
    $this->handler->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
    $this->handler->addServer($options['host'],$options['port']);
    $this->handler->setSaslAuthData($options['username'], $options['password']);
  }else{
    $this->handler->addServer($options['host'],$options['port']);
  }
}

3.修改set函数:
public function set($name, $value, $expire = null) {
  N('cache_write',1);
  if(is_null($expire)) {
    $expire = $this->options['expire'];
  }
  $name = $this->options['prefix'].$name;
  if($this->handler->set($name, $value , $expire)) {
    if($this->options['length']>0) {
      // 记录缓存队列
      $this->queue($name);
    }
    return true;
  }
  return false;
}

4.修改配置文件
//数据缓存配置
'DATA_CACHE_TYPE'=>'MEMCACHED',
//阿里云OCS配置
'MEMCACHED_OCS' => true,
'MEMCACHED_HOST'=>'***********.m.cnhzalicm10pub001.ocs.aliyuncs.com',
'MEMCACHED_USER' =>'***********',
'MEMCACHED_PWD' => '***********',

5.到控制器中测试
$cache = Cache::getInstance();
 
$cache->set('hello','world',60);
 
echo $cache->get('hello');
 
exit();

本文出自 全栈笔记 版权所有,你可以在保留原文地址:修改ThinkPHP缓存类 使支持Memcached类和Aliyun OCS 及作者的情况下到你的网站或博客。

【上一篇】
【下一篇】

您可能感兴趣的文章:

发表评论

您必须 登录 后才能发表评论。