Memcache遍历 获取模糊匹配key对应的记录

来源:互联网 发布:罗克韦尔plc编程手册 编辑:程序博客网 时间:2024/05/16 14:01
memcached只能通过get查找指定的key,而没有提供key的所有查找和key的模糊查找。
模糊查找原理:先拿到memcache服务器里面的全部cache记录,遍历所有的记录(模糊查找:过滤自己的需要的部分key),然后再有get获取key的value。
方式:通过使用memcache 内置方法Memcache::getExtendedStats(),首先获得items信息,然后在调用getExtendedStats()方法。 
代码:
$mem = new Memcache; $host = '127.0.0.0:11211'; list($ip, $port) = explode(':', $host); if (!$mem->connect($ip, $port)) {    die('连接失败!');  } //获取所有的keyfunction memcache_keys($mem, $host){      $keys = array();      $items = $mem->getExtendedStats('items');      $items = $items[$host]['items'];      foreach ($items as $key=>$values){             $number = $key;             $str = $mem->getExtendedStats('cachedump', $number, 0);  //0表示所有  若为其他数值则取多少条  $number为stats items的数值             $line = $str[$host];             foreach ($line as $k=>$v){                    $keys[] = $k;                    //模糊获取的话                    //if (substr($k, 0, 5) === 'data_') {                    //          $keys[] = $k;                    // }             }      }       return $keys; }//获取key的值 $tree = array(); function dictionary($keys, $mem) {       foreach ($keys as $k=>$v) {       $tree[$v] = $mem->get($v);  }        return $tree; } print_r(dictionary($words, $mem)); $words = memcache_keys($mem, $host);
注意:通过遍历items 的方法貌似只能获取最多2M的数据,如果Item 数据大于2M ,后面的key 就取不到了

memcache的stats命令详解

1. stats  

2. stats reset  清空统计数据

3. stats malloc  显示内存分配数据  操作是error

4. stats maps  操作是error

5. stats sizes  输出所有item的大小和个数

6. stats slabs  显示各个slab的信息,包括chunk的大小、数目、使用情况等

7. stats items  显示各个slab中item的数目和最老item的年龄(最后一次访问距离现在的秒数)

8. stats cachedump slab_id limit_num    显示某个slab中的前limit_num个key列表  

//执行stats cachedump 3 0命令。这里的3表示上面图中items后面的数字,0标示显示全部的数据,如果是1就标示只显示1条。

//结果 ITEM hello [6 b; 1413522321 s]  【大小,过期时间,永不过期则是服务器启动时间】

9. stats detail [on|off|dump]   设置或者显示详细操作记录 ,on:打开详细操作记录,off:关闭详细操作记录,dump:显示详细操作记录(每一个键值get、set、hit、del的次数)


1 0
原创粉丝点击