在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 相关文章推荐
超强分页类2.0发布,支持自定义风格,默认4种显示模式
Jan 02 PHP
php 全局变量范围分析
Aug 07 PHP
基于MySQL体系结构的分析
May 02 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
Jun 28 PHP
PHP访问Google Search API的方法
Mar 05 PHP
php内嵌函数用法实例
Mar 20 PHP
PHP+JS实现大规模数据提交的方法
Jul 02 PHP
php实现的简单中文验证码功能示例
Jan 03 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
Apr 19 PHP
利用php操作memcache缓存的基础方法示例
Aug 02 PHP
Yii2框架类自动加载机制实例分析
May 02 PHP
thinkPHP中U方法加密传递参数功能示例
May 29 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实现的MySQL通用查询程序
2007/03/11 PHP
深入密码加salt原理的分析
2013/06/06 PHP
php对二维数组按指定键值key排序示例代码
2013/11/26 PHP
php文件服务实现虚拟挂载其他目录示例
2014/04/17 PHP
[原创]php求圆周率的简单实现方法
2016/05/30 PHP
PHP判断一个数组是另一个数组子集的方法详解
2017/07/31 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
几款极品的javascript压缩混淆工具
2007/05/16 Javascript
javascript new一个对象的实质
2010/01/07 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
2015/07/03 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
JQuery PHP图片在线裁剪实例
2020/07/27 Javascript
jquery获取下拉框中的循环值
2017/02/08 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
基于JavaScript获取base64图片大小
2019/10/18 Javascript
js获取url页面id,也就是最后的数字文件名
2020/09/25 Javascript
vue data有值,但是页面{{}} 取不到值的解决
2020/11/09 Javascript
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
利用Python半自动化生成Nessus报告的方法
2019/03/19 Python
Python实现一个数组除以一个数的例子
2019/07/20 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
计算机专业自我鉴定
2013/10/15 职场文书
出国留学介绍信
2014/01/13 职场文书
大学毕业感言50字
2014/02/07 职场文书
关爱留守儿童倡议书
2014/04/15 职场文书
学习党的群众路线剖析材料
2014/10/09 职场文书
2015年党性分析材料
2014/12/19 职场文书
新教师教学工作总结
2015/08/12 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
深入理解go slice结构
2021/09/15 Golang