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 相关文章推荐
PHP中一个控制字符串输出的函数
Oct 09 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &
Feb 09 PHP
wamp安装后自定义配置的方法
Aug 23 PHP
PHP的APC模块实现上传进度条
Oct 27 PHP
PHP基于单例模式实现的mysql类
Jan 09 PHP
ThinkPHP删除栏目(实现批量删除栏目)
Jun 21 PHP
php实现基于pdo的事务处理方法示例
Jul 21 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
Aug 01 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
Mar 31 PHP
PHP获取当前系统时间的方法小结
Oct 03 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
Oct 11 PHP
PHP Pipeline 实现中间件的示例代码
Apr 26 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
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
2016/01/11 PHP
PHP正则删除HTML代码中宽高样式的方法
2017/06/12 PHP
用JavaScript显示随机图像或引用
2009/04/21 Javascript
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
jquery 注意事项与常用语法小结
2010/06/07 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
2012/03/21 Javascript
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
jQuery的ready方法实现原理分析
2016/10/26 Javascript
bootstrap模态框远程示例代码分享
2017/05/22 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
2018/10/24 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
[26:40]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第一局
2016/02/25 DOTA
python3编写C/S网络程序实例教程
2014/08/25 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
将Dataframe数据转化为ndarry数据的方法
2018/06/28 Python
基于Python执行dos命令并获取输出的结果
2019/12/30 Python
CSS3 仿微信聊天小气泡实例代码
2017/04/05 HTML / CSS
欧迪办公美国官网:Office Depot
2016/08/22 全球购物
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
给同学的道歉信
2014/01/16 职场文书
发展部经理职责规定
2014/02/22 职场文书
教师师德考核自我评价
2014/09/13 职场文书
求职导师推荐信范文
2015/03/27 职场文书
运动会广播稿20字
2015/08/19 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
晶体管单管来复再生式收音机
2021/04/22 无线电
Win11如何修改dns?Win11修改dns图文教程
2022/01/18 数码科技
德劲DE1102数字调谐收音机机评
2022/04/07 无线电