在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缓存问题解决途径
Dec 06 PHP
PHP开发负载均衡指南
Jul 17 PHP
测试php连接mysql是否成功的代码分享
Jan 24 PHP
开源php中文分词系统SCWS安装和使用实例
Apr 11 PHP
smarty模板局部缓存方法使用示例
Jun 17 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
php获取开始与结束日期之间所有日期的方法
Nov 29 PHP
php获取数据库中数据的实现方法
Jun 01 PHP
Laravel框架使用Redis的方法详解
May 30 PHP
php xhprof使用实例详解
Apr 15 PHP
PHP大文件切割上传并带进度条功能示例
Jul 01 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
Jul 06 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之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
PHP yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
2018/05/23 PHP
PHP中抽象类,接口功能、定义方法示例
2019/02/26 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
jquery ui dialog里调用datepicker的问题
2009/08/06 Javascript
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
2013/09/27 Javascript
JS+CSS实现可以凹陷显示选中单元格的方法
2015/03/02 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
深入浅析vue组件间事件传递
2017/12/29 Javascript
10个经典的网页鼠标特效代码
2018/01/09 Javascript
Vue三层嵌套路由的示例代码
2018/05/05 Javascript
JS判断字符串是否为整数的方法--简单的正则判断
2018/07/23 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
vue路由缓存的几种实现方式小结
2020/02/02 Javascript
python进阶教程之异常处理
2014/08/30 Python
python通过微信发送邮件实现电脑关机
2018/06/20 Python
python爬取网易云音乐评论
2018/11/16 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
2019/07/25 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
详解使用django-mama-cas快速搭建CAS服务的实现
2019/10/30 Python
收藏!10个免费高清视频素材网站!【设计、视频剪辑必备】
2021/03/18 杂记
加拿大百叶窗和窗帘定制网站:Blinds
2017/01/30 全球购物
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
sealed修饰符是干什么的
2012/10/23 面试题
历史专业毕业生的自我鉴定
2013/11/15 职场文书
民族精神月活动总结
2014/08/28 职场文书
团队拓展活动方案
2014/08/28 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
保证书格式
2015/01/16 职场文书