php的memcached客户端memcached


Posted in PHP onJune 14, 2011

memcache的官方主页:http://pecl.php.net/package/memcache
memcached的官方主页:http://pecl.php.net/package/memcached

以下是我安装Memcached版本的PHP模块的过程记录:

wget http://download.tangent.org/libmemcached-0.48.tar.gz
tar zxf libmemcached-0.48.tar.gz
cd libmemcached-0.48
./configure --prefix=/usr/local/libmemcached --with-memcached
make
make install

wget http://pecl.php.net/get/memcached-1.0.2.tgz
tar zxf memcached-1.0.2.tgz
cd memcached-1.0.2
/usr/local/webserver/php/bin/phpize
./configure --enable-memcached --with-php-config=/usr/local/webserver/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached
make
make install

在php.ini中加入
extension=memcached.so
完成

另:
在安装libmemcached时,如果只用./configure,可能会提示:
checking for memcached… no
configure: error: “could not find memcached binary”

两者使用起来几乎一模一样。

$mem = new Memcache; 
$mem->addServer($memcachehost, '11211'); 
$mem->addServer($memcachehost, '11212'); 
$mem->set('hx','9enjoy'); 
echo $mem->get('hx');

$md = new Memcached; 
$servers = array( 
array($memcachehost, '11211'), 
array($memcachehost, '11212') 
); 
$md->addServers($servers); 
$md->set('hx','9enjoy'); 
echo $md->get('hx');

memcached的方法比memcache多不少,比如getMulti,getByKey,addServers等。
memcached没有memcache的connect方法,目前也还不支持长连接。
memcached 支持 Binary Protocol,而 memcache 不支持,意味着 memcached 会有更高的性能。
Memcache是原生实现的,支持OO和非OO两套接口并存,memcached是使用libmemcached,只支持OO接口。
更详细的区别:http://code.google.com/p/memcached/wiki/PHPClientComparison

memcached服务端是集中式的缓存系统,分布式实现方法是由客户端决定的。
memcached的分布算法一般有两种选择:
1、根据hash(key)的结果,模连接数的余数决定存储到哪个节点,也就是hash(key)% sessions.size(),这个算法简单快速,表现良好。然而这个算法有个缺点,就是在memcached节点增加或者删除的时候,原有的缓存数据将大规模失效,命中率大受影响,如果节点数多,缓存数据多,重建缓存的代价太高,因此有了第二个算法。
2、Consistent Hashing,一致性哈希算法,他的查找节点过程如下:
    首先求出memcached服务器(节点)的哈希值,并将其配置到0~232的圆(continuum)上。然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过2的32次方后仍然找不到服务器,就会保存到第一台memcached服务器上。

memcache在没有任何配置的情况下,是使用第一种方法。memcached要实现第一种方法,似乎是使用(未确认):
$md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);  

第二种一致性哈希算法:

memcache在php.ini中加

Memcache.hash_strategy =consistent 
Memcache.hash_function =crc32

memcached在程序中加(未确认)
$md->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT); 
$md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC); 
或 
$mem->setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT); 
$mem->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE,true);

一些参考文档:
memcached分布测试报告(一致性哈希情况下的散列函数选择):
http://www.iteye.com/topic/346682
php模块memcache和memcached区别: https://3water.com/article/27366.htm
PHP模块:Memcached > Memcache:https://3water.com/article/27367.htm

20110509@@UPDATE:
如果安装libmemcached有如下出错提示:
make[2]: *** [clients/ms_conn.o] Error 1
make[2]: Leaving directory `/www/soft/libmemcached-0.48'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/www/soft/libmemcached-0.48'
make: *** [all] Error 2

可在configure时增加--disable-64bit CFLAGS="-O3 -march=i686"
即:./configure --prefix=/usr/local/libmemcached --with-memcached --disable-64bit CFLAGS="-O3 -march=i686"

PHP 相关文章推荐
Content-type 的说明
Oct 09 PHP
计算一段日期内的周末天数的php代码(星期六,星期日总和)
Nov 12 PHP
PHP禁止页面缓存的代码
Oct 23 PHP
PHP fopen 读取带中文URL地址的一点见解
Sep 25 PHP
php字符串分割函数explode的实例代码
Feb 07 PHP
解析php函数method_exists()与is_callable()的区别
Jun 21 PHP
解析PHP实现下载文件的两种方法
Jul 05 PHP
php-fpm配置详解
Feb 12 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
PHP实现的浏览器检查类
Apr 11 PHP
基于php实现的验证码小程序
Dec 13 PHP
php+ajax实现商品对比功能示例
Apr 13 PHP
PHP模块 Memcached功能多于Memcache
Jun 14 #PHP
php模块memcache和memcached区别分析
Jun 14 #PHP
sphinx增量索引的一个问题
Jun 14 #PHP
批量获取memcache值并按key的顺序返回的实现代码
Jun 14 #PHP
提高define性能的php扩展hidef的安装和使用
Jun 14 #PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 #PHP
php学习笔记 面向对象的构造与析构方法
Jun 13 #PHP
You might like
用PHP实现验证码功能
2006/10/09 PHP
PHP学习笔记(一) 简单了解PHP
2014/08/04 PHP
纯js实现的论坛常用的运行代码的效果
2008/07/15 Javascript
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
jQuery源码解读之addClass()方法分析
2015/02/20 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
学习JavaScript设计模式之模板方法模式
2016/01/20 Javascript
js实现的在线调色板功能完整实例
2016/12/21 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
jQuery带控制按钮轮播图插件
2020/07/31 jQuery
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
简单谈谈python中的多进程
2016/11/06 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
Python 保存矩阵为Excel的实现方法
2019/01/28 Python
图文详解python安装Scrapy框架步骤
2019/05/20 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
在django view中给form传入参数的例子
2019/07/19 Python
Python实现删除某列中含有空值的行的示例代码
2020/07/20 Python
使用HTML5捕捉音频与视频信息概述及实例
2018/08/22 HTML / CSS
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
电大毕业生自我鉴定
2013/11/10 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
收款委托书范本
2014/09/11 职场文书
JavaScript使用canvas绘制坐标和线
2021/04/28 Javascript
pytorch MSELoss计算平均的实现方法
2021/05/12 Python