心晴 发表于 2014-10-15 09:09:58

CI 使用 memcache

codeigniter 2.2.0 对memcache的使用,貌似存在一点bug,官方暂未修补,暂时需要改动到其基类,方法如下,仅供参考:
1. system\libraries\Cache\drivers\Cache_memcached.php
about line 165:
$this->_memcached = new Memcached();
改为:
if(extension_loaded('memcached')){
$this->_memcached = new Memcached();
}elseif (extension_loaded('memcache')){
$this->_memcached = new Memcache();
}else{
log_message('error', 'At least one memcache extension need be loaded!');
}
(以上是参考某个大神的分享)
about line 201
if ( ! extension_loaded('memcached'))
改为:
if ( ! extension_loaded('memcached') && ! extension_loaded('memcache') )

2. 增加 application/config/memcached.php 文件 (有多个服务器则自己增加多个元素)
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* MC配置文件
* Create at 2014-10-09
*/
$memcached = array(
          'server1' => array(
                  'hostname'        => '127.0.0.1',
                  'port'                => '11211',
                  'weight'        => 1
                )
);

$config['memcached'] = $memcached;

3. 修改 application/config/config.php 在最后增加
// Memcache enable
$config['memcache_enable'] = true;

4. 修改 application/config/autoload.php 大概在83行
$autoload['config'] = array('memcached');

5. 在你要使用的地方,加上
$this->load->driver('cache');
增加一个mc则使用:
$this->cache->memcached->save('foo', 'baddr', 10);
获取一个mc则使用:
$getCache = $this->cache->memcached->get('foo');

Hex 发表于 2014-10-15 17:53:06

感谢分享。

不过,这个地方应该是 CI 的 memcache 只支持 memcached 这个扩展。应该不能算是 BUG 吧。

心晴 发表于 2014-10-16 09:17:50

Hex 发表于 2014-10-15 17:53
感谢分享。

不过,这个地方应该是 CI 的 memcache 只支持 memcached 这个扩展。应该不能算是 BUG 吧。 ...

嘿嘿,我那天就觉得写错了,嗯,这不算bug;
希望CI越来越完善。
页: [1]
查看完整版本: CI 使用 memcache