在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中HTTP方式下的Gzip压缩传输方法举偶
Feb 15 PHP
php代码中使用换行及(\n或\r\n和br)的应用
Feb 02 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
Jul 08 PHP
深入探究PHP的多进程编程方法
Aug 18 PHP
基于ThinkPHP实现的日历功能实例详解
Apr 15 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
php使用 readfile() 函数设置文件大小大小的方法
Aug 11 PHP
PHP chr()函数讲解
Feb 11 PHP
laravel5.2表单验证,并显示错误信息的实例
Sep 29 PHP
PHP的Trait机制原理与用法分析
Oct 18 PHP
PHP+MySQL实现在线测试答题实例
Jan 02 PHP
php实现根据身份证获取精准年龄
Feb 26 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 日期时间处理函数小结
2009/12/18 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
php socket实现的聊天室代码分享
2014/08/16 PHP
php生成gif动画的方法
2015/11/05 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
事件绑定之小测试  onclick && addEventListener
2011/07/31 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
解决vue2中使用axios http请求出现的问题
2018/03/05 Javascript
如何在基于vue-cli的项目自定义打包环境
2018/11/10 Javascript
JS通过识别id、value值对checkbox设置选中状态
2020/02/19 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
Python MySQLdb Linux下安装笔记
2015/05/09 Python
python算法演练_One Rule 算法(详解)
2017/05/17 Python
Python 2.x如何设置命令执行的超时时间实例
2017/10/19 Python
python面向对象法实现图书管理系统
2019/04/19 Python
使用python爬取微博数据打造一颗“心”
2019/06/28 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
简单了解python协程的相关知识
2019/08/31 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
SAZAC的动物连体衣和动物睡衣:Kigurumi Shop
2020/03/14 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
武汉英思工程科技有限公司–ORACLE面试测试题目
2012/04/30 面试题
主题实践活动总结
2014/05/08 职场文书
机械系毕业生求职信
2014/05/28 职场文书
求职信的正确写法
2014/07/10 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
公积金具结保证书
2015/05/11 职场文书
员工试用期工作总结
2019/06/20 职场文书
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL
python数字图像处理数据类型及颜色空间转换
2022/06/28 Python