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的次数)