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 相关文章推荐
生成sessionid和随机密码的例子
Oct 09 PHP
整理的9个实用的PHP库简介和下载
Nov 09 PHP
php输出表格的实现代码(修正版)
Dec 29 PHP
如何在symfony中导出为CSV文件中的数据
Oct 06 PHP
php分页函数完整实例代码
Sep 22 PHP
百度实时推送api接口应用示例
Oct 21 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
Nov 03 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
Nov 17 PHP
CodeIgniter使用smtp服务发送html邮件的方法
Jun 10 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
Nov 25 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
php curl发送请求实例方法
Aug 01 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中的一个中文字符串截取函数
2007/02/14 PHP
php算开始时间到过期时间的相隔的天数
2011/01/12 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
2013/11/13 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
js动态添加的DIV中的onclick事件简单实例
2016/07/25 Javascript
JS判断form内所有表单是否为空的简单实例
2016/09/09 Javascript
JS填写银行卡号每隔4位数字加一个空格
2016/12/19 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
微信小程序之分享页面如何返回首页的示例
2018/03/28 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
介绍Python中内置的itertools模块
2015/04/29 Python
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
pandas分批读取大数据集教程
2020/06/06 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
美丽的现代设计家具:2Modern
2018/07/26 全球购物
Unix控制后台进程都有哪些进程
2016/09/22 面试题
小学生自我鉴定
2013/10/12 职场文书
中国好声音华少广告词
2014/03/17 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
深入理解python多线程编程
2021/04/18 Python