333rff 发表于 2015-11-18 08:00:52

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 【大小,过期时间,永不过期则是服务器启动时间】
9. stats detail    设置或者显示详细操作记录 ,on:打开详细操作记录,off:关闭详细操作记录,dump:显示详细操作记录(每一个键值get、set、hit、del的次数)





版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: Memcache遍历 获取模糊匹配key对应的记录