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 相关文章推荐
一个更简单的无限级分类菜单代码
Jan 16 PHP
discuz论坛 用户登录 后台程序代码
Nov 27 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
Jan 10 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
Aug 16 PHP
php中的比较运算符详解
Oct 28 PHP
php下载excel无法打开的解决方法
Dec 24 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
May 06 PHP
ThinkPHP实现一键清除缓存方法
Jun 26 PHP
php判断当前用户已在别处登录的方法
Jan 06 PHP
Yii2创建控制器(createController)方法详解
Jul 23 PHP
php实现的SSO单点登录系统接入功能示例分析
Oct 12 PHP
laravel5.1框架model类查询的实现方法
Oct 08 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
星际原理概述
2020/03/04 星际争霸
PHP URL路由类实例
2013/11/12 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
PHP 获取指定地区的天气实例代码
2017/02/08 PHP
php中上传文件的的解决方案
2018/09/25 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
12个非常有创意的JavaScript小游戏
2010/03/18 Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
2010/06/25 Javascript
JavaScript中获取Radio被选中的值
2015/11/11 Javascript
详解JavaScript实现设计模式中的适配器模式的方法
2016/05/18 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
js实现百度搜索提示框
2017/02/05 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
2018/04/18 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
小程序实现可拖动的悬浮按钮
2020/09/07 Javascript
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
python3.7.0的安装步骤
2018/08/27 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
2020/06/02 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
意大利体育用品和运动服网上商店:Maxi Sport
2019/09/14 全球购物
GWT都有什么特性
2016/12/02 面试题
教师岗位职责范本
2013/12/29 职场文书
校园报刊亭的创业计划书
2014/01/02 职场文书
五年级音乐教学反思
2014/02/06 职场文书
竞争与合作演讲稿
2014/05/12 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
欢迎词范文
2015/01/27 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL