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基础知识:类与对象(1)
Dec 13 PHP
smarty巧妙处理iframe中内容页的代码
Mar 07 PHP
PHP Cookie的使用教程详解
Jun 03 PHP
php批量删除数据库下指定前缀的表以prefix_为例
Aug 24 PHP
C/S和B/S两种架构区别与优缺点分析
Oct 23 PHP
既简单又安全的PHP验证码 附调用方法
Jun 02 PHP
PHP实现导出带样式的Excel
Aug 28 PHP
PHP学习记录之数组函数
Jun 01 PHP
PHP正则匹配到2个字符串之间的内容方法
Dec 24 PHP
php 使用mpdf实现指定字段配置字体样式的方法
Jul 29 PHP
php集成开发环境详解
Sep 24 PHP
thinkphp5+layui实现的分页样式示例
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
php文件上传表单摘自drupal的代码
2011/02/15 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
PHP中include/require/include_once/require_once使用心得
2016/08/28 PHP
PHP框架Laravel中使用UUID实现数据分表操作示例
2018/05/30 PHP
javascript 当前日期加(天、周、月、年)
2009/08/09 Javascript
jQuery学习笔记 更改jQuery对象
2012/09/19 Javascript
浅谈JavaScript 框架分类
2014/11/10 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
Python中用于返回绝对值的abs()方法
2015/05/14 Python
Python中的id()函数指的什么
2017/10/17 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
详解python算法常用技巧与内置库
2020/10/17 Python
python 读取yaml文件的两种方法(在unittest中使用)
2020/12/01 Python
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
Application Cache未缓存文件无法访问无法加载问题
2014/05/31 HTML / CSS
美国波道夫·古德曼百货官网:Bergdorf Goodman
2017/11/07 全球购物
Tommy Hilfiger美国官网:美国高端休闲领导品牌
2019/01/14 全球购物
FILA德国官方网站:来自意大利的体育和街头服饰品牌
2019/07/19 全球购物
大学生毕业自我鉴定范文
2013/09/19 职场文书
给排水工程师岗位职责
2013/11/21 职场文书
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
给校长的建议书600字
2014/05/15 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
运动会主持人开幕词
2016/03/04 职场文书
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
Mysql 一主多从的部署
2022/05/20 MySQL
3050和2060哪个好 性能差多少 差距有多大 谁更有性价比
2022/06/17 数码科技