在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 相关文章推荐
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
Jan 30 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
php获取百度收录、百度热词及百度快照的方法
Apr 02 PHP
php解析字符串里所有URL地址的方法
Apr 03 PHP
PHPStrom中实用的功能和快捷键大全
Sep 23 PHP
PHP随机数 C扩展随机数
May 04 PHP
PHP数组函数知识汇总
May 12 PHP
php的debug相关函数用法示例
Jul 11 PHP
PHP页面输出时js设置input框的选中值
Sep 30 PHP
PHP中串行化用法示例
Nov 16 PHP
php面向对象的用户登录身份验证
Jun 08 PHP
php 中htmlentities导致中文无法查询问题
Sep 10 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除数取整示例
2014/04/24 PHP
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
JS模块与命名空间的介绍
2013/03/22 Javascript
详解JavaScript函数对象
2015/11/15 Javascript
Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统
2016/05/27 Javascript
AngularJs Scope详解及示例代码
2016/09/01 Javascript
简单的js计算器实现
2016/10/26 Javascript
多种方式实现js图片预览
2016/12/12 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
2017/02/20 Javascript
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
vue实现文字横向无缝走马灯组件效果的实例代码
2019/04/09 Javascript
基于layui轮播图满屏是高度自适应的解决方法
2019/09/16 Javascript
js实现掷骰子小游戏
2019/10/24 Javascript
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
Python重新引入被覆盖的自带function
2014/07/16 Python
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
2019/12/26 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
Python日志:自定义输出字段 json格式输出方式
2020/04/27 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
Python常驻任务实现接收外界参数代码解析
2020/07/21 Python
大二学期个人自我评价
2014/01/13 职场文书
幼儿园中秋节活动反思
2014/02/16 职场文书
学生社团文化节开幕式主持词
2014/03/28 职场文书
防灾减灾活动总结
2014/08/30 职场文书
群众路线剖析材料范文
2014/10/09 职场文书
七一建党节慰问信
2015/02/14 职场文书
主持人大赛开场白
2015/05/29 职场文书
python元组打包和解包过程详解
2021/08/02 Python
Java线程的6种状态与生命周期
2022/05/11 Java/Android