php怎么使用memcached,php memcached 使用教程

本文分析了使用PHP的Memcached扩展获取所有Key时遇到的问题,特别是当涉及到多台Memcached服务器的集群时,由于getExtendedStats方法返回的是所有服务器的Key,导致可能出现重复。代码示例中展示了这个问题,并提出了需要注意的细节。对于希望正确遍历Memcached集群Key的开发者来说,这是一个重要的参考。
摘要由CSDN通过智能技术生成

php memcached 使用教程

在php提供的用于与memcached交互的扩展模块中有memcached与memcache,前者提供方法getAllKeys用于遍历所有Memcached服务器上的key,但是并不保证原子操作,而后者却没有提供任何方法,虽然在PHP官方

文档中有人给出使用方法getExtendedStats来间接获取Memcached服务器上的所有key,但是给出的代码是有不少坑的,如果拿来就用,对于cluster的memcached服务器而言,有些问题就需要指出来。

???????下面将给出官方文档中的代码,并指出可能面临的问题,代码如下:

connect('127.0.0.1',?11211)?or?die?("Could?not?connect?to?memcache?server");

$list?=?array();

$allSlabs?=?$memcache->getExtendedStats('slabs');

$items?=?$memcache->getExtendedStats('items');

foreach($allSlabs?as?$server?=>?$slabs)?{

???foreach($slabs?AS?$slabId?=>?$slabMeta)?{

??????$cdump?=?$memcache->getExtendedStats('cachedump',(int)$slabId);

??????foreach($cdump?AS?$keys?=>?$arrVal)?{

?????????foreach($arrVal?AS?$k?=>?$v){

???????????echo?$k?."

";

?????????}

??????}

????}

}//EO?getMemcacheKeys()??>

???????在上述代码中,如果用于获取单个memcached服务器上的key,是不存在任何问题,但是获取连接池中的多个memcached所有key就存在问题,会发现打印出重复的key,问题就在于当使用getExtendedStats用去特定$slabID

上的信息时,返回的是连接池中所有的服务器上的特定$slabId?的存储的keys信息。当$server为"127.0.0.1:11214"且$slabId为0将变量$cdump的信息打印出如下所示:

array(2)?{

??["127.0.0.1:11214"]=>

??array(1)?{

????["course_schools__??¨é?¨"]=>

????array(2)?{

??????[0]=>

??????string(1)?"0"?[1]=>

??????string(10)?"12"?}

??}

??["127.0.0.1:11216"]=>

??array(1)?{

????["monitorMemcache"]=>

????array(2)?{

??????[0]=>

??????string(2)?"10"?[1]=>

??????string(10)?"12"?}

??}

}

当$server为"127.0.0.1:11216"且$slabId为0将变量$cdump的信息打印出如下所示:

array(2)?{

??["127.0.0.1:11214"]=>

??array(1)?{

????["course_schools__??¨é?¨"]=>

????array(2)?{

??????[0]=>

??????string(1)?"0"?[1]=>

??????string(10)?"12"?}

??}

??["127.0.0.1:11216"]=>

??array(1)?{

????["monitorMemcache"]=>

????array(2)?{

??????[0]=>

??????string(2)?"10"?[1]=>

??????string(10)?"12"?}

??}

}

看了你的使用,对一点有疑惑,getextendedstats的第三个参数不是用来设置从服务端获取的实体条数的吗,你这里设置为0的话,那还指望它返回什么了??

0

0

0

0

b4220bf761c1e6d35f6ada31fee712c4.png

评论(0)

“还没有人发表评论,快去抢占沙发吧”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值