文章出处

 在php提供的用于与memcached交互的扩展模块中有memcached与memcache,前者提供方法getAllKeys用于遍历所有Memcached服务器上的key,但是并不保证原子操作,而后者却没有提供任何方法,虽然在PHP官方
文档中有人给出使用方法getExtendedStats来间接获取Memcached服务器上的所有key,但是给出的代码是有不少坑的,如果拿来就用,对于cluster的memcached服务器而言,有些问题就需要指出来。
下面将给出官方文档中的代码,并指出可能面临的问题,代码如下:
<?php
/*\*
* Function to get all memcache keys
* @author Manish Patel
* @Created: 28-May-2010
\*/
function getMemcacheKeys() { $memcache = new Memcache;
$memcache->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" }
}
}

最新文章

  1. jQuery源码分析系列(31) : Ajax deferred实现
  2. BZOJ1055: [HAOI2008]玩具取名
  3. SqlServer2012 数据库的同步之SQL JOB + 建立链接服务器
  4. Ajax异步刷新,测试用户名是否被注册
  5. Why The Golden Age Of Machine Learning is Just Beginning
  6. POJ 1173 Find them, Catch them
  7. Oracle 经典语法(二)
  8. JOSN学习总结&lt;二&gt; JSON的格式与语法
  9. 51nod-正整数分组问题(基础方程DP-01背包)
  10. SQL基础--&gt;层次化查询(START BY ... CONNECT BY PRIOR)[转]
  11. 实现文件下载的java代码
  12. 安装 VMware CentOS Xmanager Xshell
  13. 用一条SQL语句显示所有可能的比赛组合
  14. MongoDB用户及数据库管理命令
  15. php中的接口interface
  16. Mysql linux -N命令
  17. 20165309 Linux安装及学习
  18. 【TensorFlow学习笔记 】name_socpe variable_scope
  19. 吴裕雄 02-mysql PHP语法
  20. Entity Framework 6.1.0 Tools for Visual Studio 2012 &amp; 2013

热门文章

  1. POJ 2234
  2. QuantLib 金融计算——基本组件之 DateGeneration 类
  3. C#接口实现多态
  4. [Alpha]Scrum Meeting#10
  5. 最近用.NET实现DHT爬虫,全.NET实现
  6. Go语言string包详解
  7. OpenERP how to set the tree view limit
  8. Android:刚6瓶啤酒4两56度白酒下肚,居然20分钟做了一手机版网站 !
  9. python3随机生成中文字符
  10. 爱奇艺视频显示列表CSS实现