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 相关文章推荐
Classes and Objects in PHP5-面向对象编程 [1]
Oct 09 PHP
PHP 反向排序和随机排序代码
Jun 30 PHP
PHP数组操作汇总 php数组的使用技巧
Jul 17 PHP
PHP正则表达式之定界符和原子介绍
Oct 05 PHP
深入php数据采集的详解
Jun 02 PHP
php编写的简单页面跳转功能实现代码
Nov 27 PHP
php object转数组示例
Jan 15 PHP
PHP常用的排序和查找算法
Aug 06 PHP
PHP实现递归目录的5种方法
Oct 27 PHP
PHP封装函数实现生成随机的字符串验证码
Jan 24 PHP
php类自动装载、链式操作、魔术方法实现代码
Jul 23 PHP
php实现映射操作实例详解
Oct 02 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
360通用php防护代码(使用操作详解)
2013/06/18 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
2014/06/23 PHP
php实现在站点里面添加邮件发送的功能
2020/04/28 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
JS替换字符串中空格方法
2015/04/17 Javascript
javascript中的正则表达式使用详解
2015/08/30 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
JS产生随机数的用法小结
2016/12/10 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
微信小程序 数据交互与渲染实例详解
2017/01/21 Javascript
javaScript 连接打印机,打印小票的实例
2017/12/29 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
Three.js中矩阵和向量的使用教程
2019/03/19 Javascript
Javascript的this详解
2019/03/23 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
在nodejs中创建child process的方法
2021/01/26 NodeJs
遗传算法之Python实现代码
2017/10/10 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
谈谈python中GUI的选择
2018/03/01 Python
将matplotlib绘图嵌入pyqt的方法示例
2020/01/08 Python
解决Python pip 自动更新升级失败的问题
2020/02/21 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
详解使用postMessage解决iframe跨域通信问题
2019/11/01 HTML / CSS
Blancsom美国/加拿大:服装和生活用品供应商
2018/07/27 全球购物
Collection和Collections的区别
2016/05/02 面试题
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
《北大荒的秋天》教学反思
2014/04/14 职场文书
三分钟英语演讲稿
2014/04/24 职场文书
节约用电倡议书
2015/04/28 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript