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提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
Feb 08 PHP
PHP服务器页面间跳转实现方法
Aug 02 PHP
使用PHP获取汉字的拼音(全部与首字母)
Jun 27 PHP
php中把美国时间转为北京时间的自定义函数分享
Jul 28 PHP
php获取发送给用户的header信息的方法
Mar 16 PHP
php实现Session存储到Redis
Nov 11 PHP
Yii编程开发常见调用技巧集锦
Jul 15 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
Nov 05 PHP
php把字符串指定字符分割成数组的方法
Mar 12 PHP
PHP+Session防止表单重复提交的解决方法
Apr 09 PHP
PHP单例模式模拟Java Bean实现方法示例
Dec 07 PHP
YII2 全局异常处理深入讲解
Mar 24 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
桌面中心(三)修改数据库
2006/10/09 PHP
php 动态多文件上传
2009/01/18 PHP
深入分析php中接口与抽象类的区别
2013/06/08 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
php5.x禁用eval的操作方法
2018/10/19 PHP
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
JQuery里面的几种选择器 查找满足条件的元素$("#控件ID")
2011/08/23 Javascript
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
node.js中的buffer.Buffer.isBuffer方法使用说明
2014/12/14 Javascript
再谈JavaScript线程
2015/07/10 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
基于JavaScript实现表格滚动分页
2017/11/22 Javascript
JavaScript常用数组操作方法,包含ES6方法
2020/05/10 Javascript
js瀑布流布局的实现
2020/06/28 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
python进阶教程之异常处理
2014/08/30 Python
Django实现自定义404,500页面教程
2017/03/26 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
Python发送http请求解析返回json的实例
2018/03/26 Python
python文件拆分与重组实例
2018/12/10 Python
使用Python在Windows下获取USB PID&VID的方法
2019/07/02 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
django 取消csrf限制的实例
2020/03/13 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
MSC邮轮官方网站:加勒比海、地中海和世界各地的假期
2018/08/27 全球购物
逻辑链路控制协议
2016/10/01 面试题
幼儿教师研修感言
2014/02/12 职场文书
气象学专业个人求职信
2014/03/15 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
实习公司领导推荐函
2014/05/21 职场文书
无毒社区工作方案
2014/05/23 职场文书
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS
Python 装饰器(decorator)常用的创建方式及解析
2022/04/24 Python