在java memcached client documentation中没有提共遍历memcache所有key的方法。但是提供了两个方法statsItems和statsCacheDump,通过statsitems可以获取memcache中有多少个item,每个item上有多少个key,而statsCacheDump可以获取每个item上各个key的信息(key的名称,大小,以及有效期)。

下面是它的api文档地址:

http://www.geelou.com/javadocs/java_memcached-release_2.0.1/com/danga/MemCached/package-summary.html

通过这个例子,我有这么一个问题。memcache存的值键值对,值可以是基本数据类型,也可以是对象类型。A客户端存了一个两个key,key1是String类型,key2是Object类型。那么B客户端怎么知道key1是String类型,key2是Object类型。(可以看一下set方法,对应的value都是Object)。说白了就是说如何区分key的数据类型?????好了问题先记在这里。下面还是贴一下取key的方法。

KeysBean定义的是一个javabean,总共三个属性:这里就不在赘述了。

private String server;

private long bytes;

private long expiry;

public static Map<String,KeysBean> getKeysForMap() throws UnsupportedEncodingException{
Map<String,KeysBean> keylist=new HashMap<String,KeysBean>();
//遍历statsItems 获取items:2:number=14
Map<String,Map<String,String>> statsItems=mcc.statsItems();
Map<String,String> statsItems_sub=null;
String statsItems_sub_key=null;
int items_number=0;
String server=null;
//根据items:2:number=14,调用statsCacheDump,获取每个item中的key
Map<String,Map<String,String>> statsCacheDump=null;
Map<String,String> statsCacheDump_sub=null;
String statsCacheDumpsub_key=null;
String statsCacheDumpsub_key_value=null; for (Iterator iterator=statsItems.keySet().iterator();iterator.hasNext();) {
server=(String) iterator.next();
statsItems_sub=statsItems.get(server);
//System.out.println(server+"==="+statsItems_sub);
for (Iterator iterator_item=statsItems_sub.keySet().iterator();iterator_item.hasNext();) {
statsItems_sub_key=(String) iterator_item.next();
//System.out.println(statsItems_sub_key+":=:"+bb);
//items:2:number=14
if (statsItems_sub_key.toUpperCase().startsWith("items:".toUpperCase()) && statsItems_sub_key.toUpperCase().endsWith(":number".toUpperCase())){
items_number=Integer.parseInt(statsItems_sub.get(statsItems_sub_key).trim());
//System.out.println(statsItems_sub_key+":=:"+items_number);
statsCacheDump=mcc.statsCacheDump(new String[]{server},Integer.parseInt(statsItems_sub_key.split(":")[1].trim()), items_number); for (Iterator statsCacheDump_iterator=statsCacheDump.keySet().iterator();statsCacheDump_iterator.hasNext();) {
statsCacheDump_sub=statsCacheDump.get(statsCacheDump_iterator.next());
//System.out.println(statsCacheDump_sub);
for (Iterator iterator_keys=statsCacheDump_sub.keySet().iterator();iterator_keys.hasNext();) {
statsCacheDumpsub_key=(String) iterator_keys.next();
statsCacheDumpsub_key_value=statsCacheDump_sub.get(statsCacheDumpsub_key);
//System.out.println(statsCacheDumpsub_key);//key是中文被编码了,是客户端在set之前编码的,服务端中文key存的是密文
//System.out.println(statsCacheDumpsub_key_value); keylist.put(URLDecoder.decode(statsCacheDumpsub_key, "UTF-8"), new KeysBean(server,Long.parseLong(statsCacheDumpsub_key_value.substring(1, statsCacheDumpsub_key_value.indexOf("b;")-1).trim()),Long.parseLong(statsCacheDumpsub_key_value.substring(statsCacheDumpsub_key_value.indexOf("b;")+2,statsCacheDumpsub_key_value.indexOf("s]")-1).trim())));
}
}
} }
}
return keylist;
}

java MemCachedClient遍历memcache中所有的key的更多相关文章

  1. (转载)遍历memcache中已缓存的key

    (转载)http://www.cnblogs.com/ainiaa/archive/2011/03/11/1981108.html 最近需要做一个缓存管理的功能.其中有一个需要模糊匹配memcache ...

  2. JS 遍历JSON中每个key值

    JS 遍历JSON中的每个key值,可以按键值对进行存储: var myVar = { typeA: { option1: "one", option2: "two&qu ...

  3. 获取JSON中所有的KEY

    采用递归的方式,遍历JSON中所有的KEY. JSON格式如下: {"username":"tom","age":18,"addr ...

  4. java map遍历、排序,根据value获取key

    Map 四种遍历: Map<String,String> map = new HashMap<String, String>(); map.put("one" ...

  5. Java循环遍历中直接修改遍历对象

    Java 循环遍历中直接修改遍历对象如下,会报异常: for (ShopBaseInfo sp: sourceList) { if(sp.getId()==5){ sourceList.remove( ...

  6. PAT-1086(Tree Traversals Again)Java语言实现+根据中序和前序遍历构建树并且给出后序遍历序列

    Tree Traversals Again Tree Traversals Again 这里的第一个tip就是注意到非递归中序遍历的过程中,进栈的顺序恰好是前序遍历的顺序,而出栈的顺序恰好是中序遍历的 ...

  7. java编写二叉树以及前序遍历、中序遍历和后序遍历 .

    /** * 实现二叉树的创建.前序遍历.中序遍历和后序遍历 **/ package DataStructure; /** * Copyright 2014 by Ruiqin Sun * All ri ...

  8. Java构造二叉树、树形结构先序遍历、中序遍历、后序遍历

    package com.example.demo; public class BTree { public int data; public BTree left; public BTree rigt ...

  9. Java Map遍历方式的选择

    [原文] 1. 阐述 对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多.理由是:entrySet方法一次拿到所有key和value的集合:而keyS ...

随机推荐

  1. JVM学习之常见溢出类型

    Java堆 所有对象的实例分配都在Java堆上分配内存,堆大小由-Xmx和-Xms来调节,sample如下所示: public class HeapOOM { static class OOMObje ...

  2. iOS定位与地图

    定位: 手机上定位的实现主要有三种方式:基站(附近基站的位置),wifi(所连接路由器的位置),卫星(最准确,也最耗能). iOS的定位功能主要是由CLLocationManager类来完成的.这个类 ...

  3. Python你必须知道的十个库

    Python是优雅的,使用这些库可以使你的代码更简洁,并保持持久性.欢迎各位补充,并提出意见! Docopt.抛弃optparse和argparse吧,使用docstrings来构建优雅的,可读性强的 ...

  4. Eclipse开发工具学习之道:用Eclipse生成jar文件

    很多人都不知道怎么在Eclipse下生成jar文件,或者生成了jar文件后又老是用不了,总是会收到 Exception in thread "main" java.lang.NoC ...

  5. stackoverflow收藏

    Make a video using several .png images http://stackoverflow.com/q/13590976/5624248 Specifying and sa ...

  6. 修改 tomcat 内存

    在Jetty 的VM参数中设置: -Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m 在tomcat运行环境中设置: window环境 ...

  7. 透明窗口(窗口上面文字图片等内容不透明)的实现(使用SetLayeredWindowAttributes API函数)

    透明窗口(窗口上面文字图片等内容不透明)的实现 本文讨论通过SetLayeredWindowAttributes来实现本文的目的. SetLayeredWindowAttributes的实现必须将窗口 ...

  8. 字符串比较必须使用strcmp

    char s1[]="this" char *s2 = "this" if(s1=="this"){ printf("s1 is ...

  9. KVO和通知中心

    苹果其实在语言层面为我们做了很多事,比如Category实现装饰模式的意图,target-action实现命令模式意图等等,对于观察者模式,苹果也提供了KVO和通知中心,给开发者提供了极大的便利. 观 ...

  10. The Hardest Problem Ever(字符串)

    The Hardest Problem Ever Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24039   Accept ...