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

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('连接失败!'); 
 }
 
//获取所有的key
function 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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值