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 相关文章推荐
?生?D片??C字串
Dec 06 PHP
MayFish PHP的MVC架构的开发框架
Aug 13 PHP
PHP输出时间差函数代码
Jan 28 PHP
解析PHP实现多进程并行执行脚本
Jun 18 PHP
PHP生成网站桌面快捷方式代码分享
Oct 11 PHP
PHP计算指定日期所在周的开始和结束日期的方法
Mar 24 PHP
PHP编程实现计算抽奖概率算法完整实例
Aug 09 PHP
PHP 实现手机端APP支付宝支付功能
Jun 07 PHP
PHP获取当前系统时间的方法小结
Oct 03 PHP
PHP删除字符串中非字母数字字符方法总结
Jan 20 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
Dec 12 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 23 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实现的验证码文件类实例
2015/06/18 PHP
详解php伪造Referer请求反盗链资源
2019/01/24 PHP
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
基于Node.js的JavaScript项目构建工具gulp的使用教程
2016/05/20 Javascript
深入理解javascript的getTime()方法
2017/02/16 Javascript
JavaScrpt的面向对象全面解析
2017/05/09 Javascript
vue项目实战总结篇
2018/02/11 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
vue自定义指令用法经典实例小结
2019/03/16 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
python下读取公私钥做加解密实例详解
2017/03/29 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
pycharm远程linux开发和调试代码的方法
2018/07/17 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
PyTorch-GPU加速实例
2020/06/23 Python
python如何删除文件、目录
2020/06/23 Python
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
HTML中使用SVG与SVG预定义形状元素介绍
2013/06/28 HTML / CSS
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
2014年财务部工作总结
2014/11/11 职场文书
暑期社会实践个人总结
2015/03/06 职场文书
2015年效能监察工作总结
2015/04/23 职场文书
欠款纠纷起诉状
2015/05/19 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书
解除租赁合同协议书
2016/03/21 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
SpringBoot2零基础到精通之异常处理与web原生组件注入
2022/03/22 Java/Android
《进击的巨人》新联动CM 兵长强势出击兽巨人
2022/04/05 日漫
SQL Server 忘记密码以及重新添加新账号
2022/04/26 SQL Server
python实现双链表
2022/05/25 Python
MySQL详细讲解变量variables的用法
2022/06/21 MySQL