设为首页 收藏本站
查看: 1129|回复: 0

[经验分享] 转:php 获取memcache所有key

[复制链接]

尚未签到

发表于 2017-12-30 18:07:53 | 显示全部楼层 |阅读模式
在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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-429769-1-1.html 上篇帖子: daterangepicker+ bootstrap +php +ajax +datatable双日历的使用 下篇帖子: 简单 PHP + MySQL 数据库动态网站制作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表