在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多用户计数器代码
Mar 11 PHP
php 验证码制作(网树注释思想)
Jul 20 PHP
新手菜鸟必读:session与cookie的区别
Aug 22 PHP
PHP将字符分解为多个字符串的方法
Nov 22 PHP
PHP积分兑换接口实例
Feb 09 PHP
刷新PHP缓冲区为你的站点加速
Oct 10 PHP
php 实现Hash表功能实例详解
Nov 29 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
Mar 24 PHP
mac系统下安装多个php并自由切换的方法详解
Apr 21 PHP
PHP实现的猴王算法(猴子选大王)示例
Apr 30 PHP
laravel5.1 ajax post 传值_token示例
Oct 24 PHP
设定php简写功能的方法
Nov 28 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与XML的PDF文档生成技术
2006/10/09 PHP
基于php设计模式中工厂模式详细介绍
2013/05/15 PHP
跟我学Laravel之快速入门
2014/10/15 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
使用PHPExcel导出Excel表
2018/09/08 PHP
popdiv
2006/07/14 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
jquery实现在页面加载完毕后获取图片高度或宽度
2014/06/16 Javascript
JS修改iframe页面背景颜色的方法
2015/04/01 Javascript
JS实现根据文件字节数返回文件大小的方法
2016/08/02 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
js 毫秒转天时分秒的实例
2017/11/17 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
JS实现判断有效的数独算法示例
2019/02/25 Javascript
jQuery创建折叠式菜单
2019/06/15 jQuery
在Mac OS上搭建Python的开发环境
2015/12/24 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
python机器学习实战之K均值聚类
2017/12/20 Python
详解flask入门模板引擎
2018/07/18 Python
六行python代码的爱心曲线详解
2019/05/17 Python
Django model select的多种用法详解
2019/07/16 Python
python redis 批量设置过期key过程解析
2019/11/26 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
KIKO MILANO西班牙官网:意大利领先的化妆品和护肤品品牌
2019/05/03 全球购物
贝佳斯官方网站:Borghese
2020/05/08 全球购物
《爱如茉莉》教后反思
2014/04/12 职场文书
社区工作者演讲稿
2014/05/23 职场文书
计算机实训报告总结
2014/11/05 职场文书
幼儿园六一儿童节主持词
2015/06/30 职场文书
2016年感恩教师节校园广播稿
2015/12/18 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书
Navicat连接MySQL错误描述分析
2021/06/02 MySQL