在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中使用Oracle数据库(4)
Oct 09 PHP
兼容性最强的PHP生成缩略图的函数代码(修改版)
Jan 18 PHP
php session_start()出错原因分析及解决方法
Oct 28 PHP
PHP中应该避免使用同名变量(拆分临时变量)
Apr 03 PHP
Laravel 5框架学习之表单验证
Apr 08 PHP
php生成gif动画的方法
Nov 05 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
基于php实现随机合并数组并排序(原排序)
Nov 26 PHP
PHP中利用sleep函数实现定时执行功能实现代码
Aug 25 PHP
10个值得深思的PHP面试题
Nov 14 PHP
PHP使用file_get_contents发送http请求功能简单示例
Apr 29 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
Oct 03 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的ASP防火墙
2006/10/09 PHP
php switch语句多个值匹配同一代码块的实现
2014/03/03 PHP
php给图片加文字水印
2015/07/31 PHP
浅析PHP开发规范
2018/02/05 PHP
redis+php实现微博(三)微博列表功能详解
2019/09/23 PHP
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
AngularJS 自定义过滤器详解及实例代码
2016/09/14 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
原生js jquery ajax请求以及jsonp的调用方法
2017/08/04 jQuery
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
Python三级菜单的实例
2017/09/13 Python
python验证码识别实例代码
2018/02/03 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
Python3将jpg转为pdf文件的方法示例
2019/12/13 Python
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
顶撞老师检讨书
2014/02/07 职场文书
简历里的自我评价范文
2014/02/24 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
调查研究项目计划书
2014/04/29 职场文书
技术负责人岗位职责
2015/02/10 职场文书
个人自荐书范文
2015/03/09 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
再谈python_tkinter弹出对话框创建
2022/03/20 Python