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 相关文章推荐
用libTemplate实现静态网页的生成
Oct 09 PHP
用DBSQL类加快开发MySQL数据库程序的速度
Oct 09 PHP
DEDE采集大师官方留后门的删除办法
Jan 08 PHP
php 文件上传实例代码
Apr 19 PHP
PHP面向对象学习笔记之一 基础概念
Oct 06 PHP
php函数与传递参数实例分析
Nov 15 PHP
PHP调用MySQL存储过程并返回值的方法
Dec 26 PHP
PHP+JS三级菜单联动菜单实现方法
Feb 24 PHP
PHP性能优化大全(php.ini)
May 20 PHP
PHP如何读取由JavaScript设置的Cookie
Mar 22 PHP
laravel 事件/监听器实例代码
Apr 12 PHP
mac pecl 安装php7.1扩展教程
Oct 17 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限制HTML内容中图片必须是本站的方法
2015/06/16 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
javascript实现可键盘控制的抽奖系统
2016/03/10 Javascript
JavaScript仿网易选项卡制作代码
2016/10/06 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
JavaScript图片处理与合成总结
2018/03/04 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
Vue 动态组件components和v-once指令的实现
2019/08/30 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
vue 单页应用和多页应用的优劣
2020/10/22 Javascript
[02:55]DOTA2英雄基础教程 发条技师
2013/12/04 DOTA
python实现ip查询示例
2014/03/26 Python
Python调用SQLPlus来操作和解析Oracle数据库的方法
2016/04/09 Python
12步入门Python中的decorator装饰器使用方法
2016/06/20 Python
Django实战之用户认证(用户登录与注销)
2018/07/16 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
2019/11/11 Python
如何定义TensorFlow输入节点
2020/01/23 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
简述synchronized和java.util.concurrent.locks.Lock的异同
2014/12/08 面试题
电子技术专业中专生的自我评价
2013/12/17 职场文书
结婚邀请函范文
2014/01/14 职场文书
小学课外活动总结
2014/07/09 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
乡镇群众路线整改落实情况汇报
2014/10/28 职场文书