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
php关于array_multisort多维数组排序的使用说明
Jan 04 PHP
PHP之短标签开启设置
Jun 17 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
Jan 30 PHP
php实现快速排序的三种方法分享
Mar 12 PHP
常见PHP数据库解决方案分析介绍
Sep 24 PHP
YII CLinkPager分页类扩展增加显示共多少页
Jan 29 PHP
php数值转换时间及时间转换数值用法示例
May 18 PHP
php实现微信原生支付(扫码支付)功能
May 30 PHP
详解Laravel服务容器的绑定与解析
Nov 05 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 PHP
PHP如何通过带尾指针的链表实现'队列'
Oct 22 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
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
2013/11/28 PHP
PHP图像处理类库MagickWand用法实例分析
2015/05/21 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
jQuery中innerHeight()方法用法实例
2015/01/19 Javascript
用户代理字符串userAgent可实现的四个识别
2015/09/20 Javascript
浅析JavaScript 调试方法和技巧
2015/10/22 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
JS返回只包含数字类型的数组实例分析
2016/12/16 Javascript
vue组件如何被其他项目引用
2017/04/13 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
vue-cli常用设置总结
2018/02/24 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
微信小程序分享功能onShareAppMessage(options)用法分析
2019/04/24 Javascript
[01:14:31]Secret vs VG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
对Python 除法负数取商的取整方式详解
2018/12/12 Python
Python中顺序表原理与实现方法详解
2019/12/03 Python
Python MySQL 日期时间格式化作为参数的操作
2020/03/02 Python
用css3写出气球样式的示例代码
2017/09/11 HTML / CSS
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
中药专业大学生医药工作求职信
2013/10/25 职场文书
高中同学聚会邀请函
2014/01/11 职场文书
网络编辑岗位职责范本
2014/02/10 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
2015年社区居委会工作总结
2015/05/18 职场文书
2015入党自传书范文
2015/06/26 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python