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 相关文章推荐
用Socket发送电子邮件
Oct 09 PHP
php 文件状态缓存带来的问题
Dec 14 PHP
PHP file_get_contents 函数超时的几种解决方法
Jul 30 PHP
关于php fread()使用技巧
Jan 22 PHP
PHPMailer的主要功能特点和简单使用说明
Feb 17 PHP
php实现根据url自动生成缩略图的方法
Sep 23 PHP
PHP中curl_setopt函数用法实例分析
Apr 16 PHP
ThinkPHP进程计数类Process用法实例详解
Sep 25 PHP
php将html转为图片的实现方法
May 19 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
Jul 13 PHP
Laravel 类和接口注入相关的代码
Oct 15 PHP
PHP实现文件上传与下载
Aug 28 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
BBS(php & mysql)完整版(五)
2006/10/09 PHP
PHP iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
2010/04/28 PHP
PHP中变量引用与变量销毁机制分析
2014/11/15 PHP
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
jQuery实现tab选项卡效果的方法
2015/07/08 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
vue从使用到源码实现教程详解
2016/09/19 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
常用的javascript设计模式
2017/01/11 Javascript
JavaScript实现简单的四则运算计算器完整实例
2017/04/28 Javascript
vue计算属性computed的使用方法示例
2019/03/13 Javascript
javascript获取select值的方法完整实例
2019/06/20 Javascript
p5.js实现简单货车运动动画
2019/10/23 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
2019/11/05 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
浅谈pandas dataframe对除数是零的处理
2020/07/20 Python
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
土木工程专业自荐信
2013/10/04 职场文书
单位在职证明范本
2014/01/09 职场文书
高中同学聚会邀请函
2014/01/11 职场文书
网上开商店的创业计划书
2014/01/19 职场文书
个人自我评价和职业目标
2014/01/24 职场文书
创建市级文明单位实施方案
2014/03/01 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
保护环境建议书400字
2014/05/13 职场文书
2014报到证办理个人委托书
2014/10/08 职场文书
旷工检讨书1000字
2015/01/01 职场文书
单位接收函范文
2015/01/30 职场文书
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL