在Mac OS的PHP环境下安装配置MemCache的全过程解析


Posted in PHP onFebruary 15, 2016

安装服务端
memcache是项目名,而在服务端的驻留进程叫memcached(linux的守护进程一般都是在后面加个d)。在OSX下使用brew可以快速安装memcache:

$ sudo brew install memcached

memcache的依赖:openssl和libevent会自动下载并安装。

安装完成后,使用如下命令启动:

$ sudo memcached -m 32 -p 11211 -d

安装php扩展
使用php操作memcache前,需要安装php的扩展,php的扩展有两个可以选择memcache和memcached,这里就安装比较经典的前者。从这里选择一个版本下载源码压缩包,解压,进入到源码目录后执行:

$ sudo phpize

phpize是帮助用来在已编译好的php外,编译php扩展用的脚本,用来生成configure、make等文件。有时执行这个命令会报错:

Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

缺少依赖,那就安装咯,还是使用brew:

$ sudo brew install autoconf
phpize完成后,依次实行如下命令实现编译和安装:

$ sudo ./configure
$ sudo make
$ sudo make install

编译好的memcache.so一般被安装到如下目录:

Installing shared extensions: /usr/lib/php/extensions/no-debug-non-zts-xxxxxx/

这样就可以在php.ini中配置这个扩展了:

extension=/usr/lib/php/extensions/no-debug-non-zts-xxxxxx/memcache.so

打开phpinfo()页面,查看memcache是否已经加载成功:

在Mac OS的PHP环境下安装配置MemCache的全过程解析

设置yii
这样其实已经可以在php中直接使用memcache了,这里就不累述了,如果在yii中使用,则需要添加一个组件:

'components'=>array(

  'cache'=>array(
    'class'=>'CMemCache',
    'servers'=>array(
      array(
        'host'=>'127.0.0.1',
        'port'=>11211
      )
    ),
  ),
...

关于更多的yii配置请参阅其文档。最后,在yii中使用memcache:

Yii::app()->cache->set('key1','value1');
Yii::app()->cache->get('key1');

memcached使用示例
将纯粹使用数据库查询的代码加上memcached支持是很简单的,假设这是原来的代码:

function get_foo (int userid) {
  result = db_select("SELECT * FROM users WHERE userid = ?", userid);
  return result;
}

加上memcached的缓存机制后:

function get_foo (int userid) {
  result = memcached_fetch("userrow:" + userid);
  if (!result) {
    result = db_select("SELECT * FROM users WHERE userid = ?", userid);
    memcached_add("userrow:" + userid, result);
  }
  return result;
}

上述的程序会先到memcached检查是否有userrow:userid的数据,如果有则直接传回结果,如果不存在时再去数据库查询,并将结果放到memcached内。

在memcached内已经有缓存信息时将数据库的数据更新后,上述的程序会抓到旧的数据,这是属于Cache coherency的问题。其中一种解决的方法是在更新数据库时,同时更新memcached内的信息:

function update_foo(int userid, string dbUpdateString) {
  result = db_execute(dbUpdateString);
  if (result) {
    data = createUserDataFromDBString(dbUpdateString);
    memcached_set("userrow:"+userid, data);
  }
}
PHP 相关文章推荐
PHP开发中四种查询返回结果分析
Jan 02 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
Jun 19 PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
Jun 20 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
Aug 11 PHP
3款值得推荐的微信开发开源框架
Oct 28 PHP
php+mysql删除指定编号员工信息的方法
Jan 14 PHP
php判断表是否存在的方法
Jun 18 PHP
php验证码实现代码(3种)
Sep 07 PHP
Centos6.5和Centos7 php环境搭建方法
May 27 PHP
PHP基于自增数据如何生成不重复的随机数示例
May 19 PHP
Laravel中前端js上传图片到七牛云的示例代码
Sep 04 PHP
用php定义一个数组最简单的方法
Oct 04 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
Feb 15 #PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
Feb 15 #PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
Feb 15 #PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
Feb 15 #PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
Feb 14 #PHP
php socket通信(tcp/udp)实例分析
Feb 14 #PHP
PHP检测用户是否关闭浏览器的方法
Feb 14 #PHP
You might like
使用PHP的日期与时间函数技巧
2008/04/24 PHP
PHP的拦截器实例分析
2014/11/03 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
javascript下过滤数组重复值的代码
2007/09/10 Javascript
flash 得到自身url参数的代码
2009/11/15 Javascript
nodejs中实现阻塞实例
2015/03/24 NodeJs
javascript中scrollTop详解
2015/04/13 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
教你用javascript实现随机标签云效果_附代码
2016/03/16 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
2017/02/23 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
2018/08/19 Javascript
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
深入理解基于vue-cli的webpack打包优化实践及探索
2019/10/14 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
浅析webpack-bundle-analyzer在vue-cli3中的使用
2019/10/23 Javascript
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
Python实现网络端口转发和重定向的方法
2016/09/19 Python
深入理解Python中变量赋值的问题
2017/01/12 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
Python利用splinter实现浏览器自动化操作方法
2018/05/11 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
2020/05/08 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
python 30行代码实现蚂蚁森林自动偷能量
2021/02/08 Python
夜大自我鉴定
2013/10/31 职场文书
安全环保标语
2014/06/09 职场文书
会计学专业自荐信
2014/06/25 职场文书
电焊工岗位工作职责
2014/07/09 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书
掌握这项技巧,一年阅读300本书不是梦
2019/09/12 职场文书
Oracle表空间与权限的深入讲解
2021/11/17 Oracle