在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 相关文章推荐
ajax php 实现写入数据库
Sep 02 PHP
PHP连接SQLServer2005 的问题解决方法
Jul 19 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
php截取后台登陆密码的代码
May 05 PHP
php指定函数参数默认值示例代码
Dec 04 PHP
php多文件上传实现代码
Feb 20 PHP
PHP设置Cookie的HTTPONLY属性方法
Feb 09 PHP
浅谈Laravel队列实现原理解决问题记录
Aug 19 PHP
Laravel中的Blade模板引擎示例详解
Oct 10 PHP
thinkPHP5框架设置404、403等http状态页面的方法
Jun 05 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
Oct 09 PHP
php抽象方法和普通方法的区别点总结
Oct 13 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 获取远程网页内容的函数
2009/09/08 PHP
PHP开发中四种查询返回结果分析
2011/01/02 PHP
php中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
PHP中基本HTTP认证技巧分析
2015/03/16 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
PHP常用函数之base64图片上传功能详解
2019/10/21 PHP
再谈IE中Flash控件的自动激活 ObjectWrap
2007/03/09 Javascript
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
jquery判断单选按钮radio是否选中的方法
2015/05/05 Javascript
javascript实现继承的简单实例
2015/07/26 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
2016/08/31 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
手把手教你搭建ES6的开发运行环境
2017/07/11 Javascript
JS获取当前地理位置的方法
2017/10/25 Javascript
详解Vuex管理登录状态
2017/11/13 Javascript
使用vuex缓存数据并优化自己的vuex-cache
2018/05/30 Javascript
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
webpack 如何解析代码模块路径的实现
2019/09/04 Javascript
如何检测JavaScript中的死循环示例详解
2020/08/30 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
[41:08]2014 DOTA2国际邀请赛中国区预选赛 HGT VS NE
2014/05/22 DOTA
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
pygame游戏之旅 添加碰撞效果的方法
2018/11/20 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
小学信息技术教学反思
2014/02/10 职场文书
在校大学生个人的自我评价
2014/02/13 职场文书
骨干教师事迹材料
2014/12/17 职场文书
党性分析材料格式
2014/12/19 职场文书
销售助理岗位职责
2015/02/11 职场文书
辞职申请书范本
2019/05/20 职场文书
使用SQL实现车流量的计算的示例代码
2022/02/28 SQL Server