在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 图片加水印与上传图片加水印php类
May 12 PHP
php 获取一个月第一天与最后一天的代码
May 16 PHP
PHP对象相互引用的内存溢出实例分析
Aug 28 PHP
用php代码限制国内IP访问我们网站
Sep 26 PHP
weiphp微信公众平台授权设置
Jan 04 PHP
PHP中PDO的事务处理分析
Apr 07 PHP
Smarty保留变量用法分析
May 23 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
Jun 08 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
Feb 06 PHP
thinkphp 框架数据库切换实现方法分析
May 18 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
Oct 30 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报表之jpgraph柱状图实例代码
2011/08/22 PHP
PHP7 echo和print语句实例用法
2019/02/15 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
2018/02/05 Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
2018/07/17 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
查找Vue中下标的操作(some和findindex)
2020/08/12 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
举例讲解Python程序与系统shell交互的方式
2015/04/09 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
深入理解Python中的内置常量
2017/05/20 Python
Python之多线程爬虫抓取网页图片的示例代码
2018/01/10 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
NIHAOMARKET官方海外旗舰店:意大利你好华人超市
2018/01/27 全球购物
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
英国最受欢迎的母婴精品品牌:JoJo Maman BéBé
2021/02/17 全球购物
如何配置、使用和清除Smarty缓存
2015/12/23 面试题
护士实习鉴定范文
2013/12/22 职场文书
高中的职业生涯规划书
2013/12/28 职场文书
《月亮湾》教学反思
2014/04/14 职场文书
2014报到证办理个人委托书
2014/10/08 职场文书
政风行风建设整改方案
2014/10/27 职场文书
成品仓管员岗位职责
2015/04/01 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
离婚民事起诉状
2015/08/03 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书
2020年元旦晚会策划书模板
2019/12/30 职场文书
Python实现智慧校园自动评教全新版
2021/06/18 Python
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python