找到system/libraries/Cache/drivers/Cache_memcached.php

1._setup_memcached方法中大概165行左右,要先判断是否开启了memcached扩展

$this->_memcached = new Memcached();

修改为:

if (extension_loaded('memcached')){$this->_memcached = new Memcached();
}else{$this->_memcached = new Memcache();
}

2.还是_setup_memcached方法,大概171行左右

$cache_server['hostname'] = $this->_default_options['default_host'];

修改为

$cache_server['hostname'] = $this->_memcache_conf[$name]['default_host'];

$cache_server['port']和$cache_server['weight']也是一样修改

3. _setup_memcached方法,大概184行左右

$this->_memcached->addServer($cache_server['hostname'], $cache_server['port'], $cache_server['weight']
);

修改为

if (extension_loaded('memcached')){$this->_memcached->addServer($cache_server['hostname'], $cache_server['port'], $cache_server['weight']);
}else{$this->_memcached->addServer($cache_server['hostname'], $cache_server['port'], TRUE, $cache_server['weight']);
}

也是做一下判断是否开启了memcached扩展,因为memcache和memcached的addServer参数不一致

4.is_supported方法,第199行左右

if ( ! extension_loaded('memcached'))

修改为

if ( ! extension_loaded('memcached') && ! extension_loaded('memcache'))

两种扩展都没打开时,才return false;停止使用memcached 。

做完如上操作,CI的memcached就可以兼容memcache和memcached。

下面就可以自己写一个lib来使用

在libraries下创建一个memcached_lib.php

内容如下:

<?php
class memcached_lib{/*** 得到memcached的Information*/function get_stats(){$CI =& get_instance();$CI->load->driver('cache');return $CI->cache->memcached->cache_info();}/*** 数据缓存** 该函数可选择以Memcache缓存还是以文件写入形式缓存。* 如果开启Memcache,在config.php下修改$config['memcached']['enable']=TRUE;* 否则缓存信息将以文本形式存储在application/cache文件夹下。* 文件命名格式:$key+md5(ip_address+user_aguent);* 如果能用Memcache就尽量用,不要使用文本,否则会产生一堆的垃圾文件* 已写垃圾回收机制* 注意,该函数缓存的数据只针对某个用户而非类似缓存新闻列表等全局调用的。* 如需使用全局的缓存,则使用memory()方法替代* @param string $cmd get|set|rm* @param string $key* @param mixed $value* @param int $expire* @return mixed*/function cache($cmd,$key,$value=null,$expire=600) {static $ways = null;$CI =& get_instance();if(is_null($ways)){$mem = $CI->config->item('memcached');if($mem['enable'] === TRUE){$ways = 'memcached';}else{$ways = 'file';}}$CI->load->driver('cache');$subfix = '';$subfix .= trim(substr($CI->input->user_agent(), 0, 120));$subfix .= $CI->input->ip_address();$key .= '_'.md5($subfix);switch ($cmd) {case 'get':return $CI->cache->$ways->get($key);break;case 'set':return $CI->cache->$ways->save($key,$value,$expire);break;case 'rm':$CI->cache->$ways->delete($key);break;}}/*** 内存操作* 此函数为使用全局memcache的便携操作** $cmd = get|set|rm** @param mix $cmd* @param string $key* @param mix $value* @param int $expire*/function memory($cmd, $key, $value=null, $expire=600) {static $enable = null;$CI =& get_instance();if (is_null($enable)) {$mem_config = $CI->config->item('memcached');$enable = $mem_config['enable'];}if ($enable) {$CI->load->driver('cache');switch ($cmd) {case 'get': return $CI->cache->memcached->get($key); break;case 'set': return $CI->cache->memcached->save($key, $value,$expire); break;case 'rm' : return $CI->cache->memcached->delete($key); break;}}else {show_error('Can not connect to memory server', 500);//在config.php下配置中打开memcahce}}/*** 文本方式缓存** 使用文本缓存,效果跟memory一样** @param string $cacheName* @return mixed*/function file_cache($cmd, $key, $value=null, $expire=600) {static $writeable = null;$cache_path = APPPATH.'/cache';if(is_null($writeable)){$writeable = is_really_writable($cache_path);}if($writeable == TRUE){$CI =& get_instance();$CI->load->driver('cache');switch ($cmd) {case 'get': return $CI->cache->file->get($key); break;case 'set': return $CI->cache->file->save($key, $value,$expire); break;case 'rm' : return $CI->cache->file->delete($key); break;}}else{show_error("Directory:$cache_path is unwritable",500);}}}

这段代码也是从网上拔得

每个方法是干嘛的,注释都写的很清楚

CI中使用memcached相关推荐

  1. ***CI中的数据库操作(insert_id新增后返回记录ID)

    在system/application/config 文件夹和里面的config文件里已经配置了参数 $active_group = "default"; $db['default ...

  2. [codeigniter]CI中使用pChart绘制图表,已测通过

    因为一个codeigniter开发的项目上要用到图表.FusionChart是flash技术,在某些情况下可能造成无法使用(如ipad).因此不禁想起了之前用Pchart做的图表项目. 但是毕竟是在C ...

  3. .NET中使用Memcached的相关资源整理 转载之DUDU 程序员打杂的站长

    .NET中使用Memcached的相关资源整理 Memcached官方站点:http://www.danga.com/memcached/ Memcached Win32 1.2.6下载:http:/ ...

  4. linux重启memcache_Linux中安装Memcached服务的方法

    Linux中安装Memcached服务的方法 导语:在Linux中安装Memcached服务需要执行一些命令行,下面就由小编为大家介绍一下Linux中安装Memcached服务的方法,大家一起去看看吧 ...

  5. 谈自动化测试与CI中一些常见的谬见

    现在对于自动化测试与CI往往有一些很常见的谬见,包括一些专门从事相关工作的人都未必清楚.在实际的工作中感触颇深,所以想撰文讨论一下. 第一,自动化测试就是给CI服务的,或者自动化测试不太能发现问题. ...

  6. memcached安装及.NET中的Memcached.ClientLibrary使用详解

    序言 吹吹牛逼先,借我你的20分钟,保证你在.net中使用memcached缓存数据,畅通无阻,提升数据读取效率,分担数据库压力,便不在话下. 本篇主要说下:memcached分布式缓存的负载均衡配置 ...

  7. myeclipse 2017 CI 中如何修改Servlet模板

    myeclipse 2017 CI 中如何修改Servlet模板 在实际开发中,这些生成的代码和注释一般我们都用不到的,每次都要手工删除这些注释和代码,很麻烦,因此可以根据开发的实际情况修改Servl ...

  8. ci中使用phpExcel

    ci中使用phpExcel 我们在工作当中有的时候给你数据格式并不是你想要的,只是给了你一个Excel,那么这个时候我们该怎么办呢 这个时候我们就需要使用PHPExcel了 当然有的人可能会说不会用, ...

  9. [Cake] 1. CI中的Cake

    在上一篇C#Make自动化构建-简介中,简单的介绍了下Cake的脚本如何编写以及通过Powershell或者Bash在本地运行Cake脚本.本篇在此基础上,介绍下如何在CI环境中使用Cake. 1. ...

最新文章

  1. 未能加载文件或程序集“Antlr3.Runtime”或它的某一个依赖项。参数错误。 (异常来自 HRESULT:0x80070057 (E_INVALIDARG))解决方法。...
  2. linux系统网络对时,Linux系统网络优化【转】
  3. CSS定位总结:position=static/relative/absolute/fixed时的区别、top/bottom/left/right与margin外边距的运用
  4. vue使用class添加动态类
  5. 使用 Python 解数学方程
  6. python的爬虫功能如何实现
  7. 品牌直播启动的三个关键点
  8. 如何关闭快递收货隐私手机号 拼多多
  9. 谁在使用我的网站——用户分类
  10. vue学习-处理边界-依赖注入
  11. 读《鸟哥的linux私房菜》有感--第四天
  12. Win7安装英文语言包(图文)
  13. PackageManager获取应用列表
  14. 重装系统后安装并激活Office
  15. linux开启vt虚拟化,VT虚拟化如何开启
  16. 仅限中国:AMD推出Radeon RX 560 XT
  17. 传奇私服服务器怎么增加npc,在自己的传奇服务器中如何添加NPC
  18. babylonjs创建坐标轴
  19. 在Tensorflow中使用深度学习构建图像标题生成器
  20. Android编程小技巧

热门文章

  1. FFmpegFrameGrabber-视频长度异常问题
  2. iOS 10越狱和Reveal 8分析三方App UI框架教程
  3. 第22章针对Cloze Tests基于Attention机制的的MRC
  4. bugku 新平台 web1 writeup
  5. Filter-policy工具理论与实践
  6. 烃贝科技:Steem对妄想控盘者说88!
  7. 博考图书管理系统php,PHPEMS
  8. kali渗透学习-后渗透利用阶段(wce和漏洞利用)
  9. 通信原理实验箱QY-JXSY48
  10. Environment.Exit(0)和Environment.Exit()方法