php使用memcached

在linux下使用php+nginx 编译安装了memcached ,注意不是memcache

在php中调用 时不能使用memcahce 的扩展调用方式

$mem = new Mecache();
$mem -> connect( $host , $post);

应该要使用memcached扩展来调用

$mem = new Memcached();
$mem -> addServer( $host , $port );

memcached 调用方式如下:

■Memcached::add — 向一个新的key下面增加一个元素
■Memcached::addByKey — 在指定服务器上的一个新的key下增加一个元素
■Memcached::addServer — 向服务器池中增加一个服务器
■Memcached::addServers — 向服务器池中增加多台服务器
■Memcached::append — 向已存在元素后追加数据
■Memcached::appendByKey — 向指定服务器上已存在元素后追加数据
■Memcached::cas — 比较并交换值
■Memcached::casByKey — 在指定服务器上比较并交换值
■Memcached::__construct — 创建一个Memcached实例
■Memcached::decrement — 减小数值元素的值
■Memcached::delete — 删除一个元素
■Memcached::deleteByKey — 从指定的服务器删除一个元素
■Memcached::fetch — 抓取下一个结果
■Memcached::fetchAll — 抓取所有剩余的结果
■Memcached::flush — 作废缓存中的所有元素
■Memcached::get — 检索一个元素
■Memcached::getByKey — 从特定的服务器检索元素
■Memcached::getDelayed — 请求多个元素
■Memcached::getDelayedByKey — 从指定的服务器上请求多个元素
■Memcached::getMulti — 检索多个元素
■Memcached::getMultiByKey — 从特定服务器检索多个元素
■Memcached::getOption — 获取Memcached的选项值
■Memcached::getResultCode — 返回最后一次操作的结果代码
■Memcached::getResultMessage — 返回最后一次操作的结果描述消息
■Memcached::getServerByKey — 获取一个key所映射的服务器信息
■Memcached::getServerList — 获取服务器池中的服务器列表
■Memcached::getStats — 获取服务器池的统计信息
■Memcached::getVersion — 获取服务器池中所有服务器的版本信息
■Memcached::increment — 增加数值元素的值
■Memcached::prepend — 向一个已存在的元素前面追加数据
■Memcached::prependByKey — Prepend data to an existing item on a specific server
■Memcached::replace — 替换已存在key下的元素
■Memcached::replaceByKey — Replace the item under an existing key on a specific server
■Memcached::set — 存储一个元素
■Memcached::setByKey — Store an item on a specific server
■Memcached::setMulti — 存储多个元素
■Memcached::setMultiByKey — Store multiple items on a specific server
■Memcached::setOption — 设置一个memcached选项

————————————————

这里介绍一种php客户端memcached的安装方法.

之前在安装memcache时有提到memcached客户端是叫memcache,其实还有一个基于libmemcached的客户端叫memcached,据说性能更好,功能也更多。参考:memcached与memcache的区别 | 学习笔记

memcache的官方主页:PECL :: Package :: memcache
memcached的官方主页:PECL :: Package :: memcached

以下是我安装Memcached版本的PHP模块的过程记录:

#wget http://download.tangent.org/libmemcached-0.9.tar.gz
#tar zxf libmemcached-0.9.tar.gz
#cd libmemcached-0.9
#./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/php/bin/phpize
#./configure --enable-memcached --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached --prefix=/usr/local/phpmemcached
#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区别:如流,新一代智能工作平台
PHP模块:Memcached > Memcache:如流,新一代智能工作平台

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″

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值