在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 相关文章推荐
第四节 构造函数和析构函数 [4]
Oct 09 PHP
PHP在特殊字符前加斜杠的实现代码
Jul 17 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
May 15 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
Feb 02 PHP
PHP 生成N个不重复的随机数
Jan 21 PHP
PHP中使用php://input处理相同name值的表单数据
Feb 03 PHP
php采用session实现防止页面重复刷新
Dec 24 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
PHP简单获取多个checkbox值的方法
Jun 13 PHP
Yii的Srbac插件用法详解
Jul 14 PHP
PHP静态成员变量
Feb 14 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的聊天室设计
2006/10/09 PHP
PHP 中文乱码解决办法总结分析
2009/07/30 PHP
如何使用php绘制在图片上的正余弦曲线
2013/06/08 PHP
PHP CURL获取cookies模拟登录的方法
2013/11/04 PHP
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
深入分析js中的constructor和prototype
2012/04/07 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
jquery 日期控件datepicker属性详细解析
2013/11/08 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
基于zTree树形菜单的使用实例
2017/12/25 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
js中!和!!的区别与用法
2020/05/09 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
Python使用PyCrypto实现AES加密功能示例
2017/05/22 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
银行演讲稿范文
2014/01/03 职场文书
婚礼证婚人证婚词
2014/01/13 职场文书
微笑服务演讲稿
2014/05/13 职场文书
个人安全生产承诺书
2014/05/22 职场文书
处级干部反四风个人对照检查材料思想汇报
2014/09/27 职场文书
银行授权委托书格式
2014/10/10 职场文书
2014年银行客户经理工作总结
2014/11/12 职场文书
交通安全教育主题班会
2015/08/12 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python