• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

转:php获取memcache所有key

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

文章出处

 在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" }
  }
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
php多线程发布时间:2022-07-10
下一篇:
深入理解PHP之foreach发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap