在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. HDU 2685 I won't tell you this is about number theory

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2685 题意:求gcd(a^m - 1, a^n - 1) mod k 思路:gcd(a^m - 1, ...

  2. javascript 数组的常用操作函数

    join() Array.join(/* optional */ separator) 将数组转换为字符串,可带一个参数 separator (分隔符,默认为“,”). 与之相反的一个方法是:Stri ...

  3. asp.net内置对象session和cookie

    1.各个机器的session对象不同,不同浏览器之间不通用(换个浏览器,是个新的session). 2.session状态对象起始于网页打开,终止于网页关闭,生命周期有限. 3.关闭浏览器/超时的情况 ...

  4. Python核心编程笔记--unicode编码

    #定义编码方式,与物理文件. code='utf-8'file='D:/utf8.txt' #把编码后的字符写入文件. hello_out =u'hello world'bytes_out =hell ...

  5. IZ65534: 'JAVA.LANG.CLASSFORMATERROR' ERROR FOR A VALID IDENTIFIER

    PAR status Closed as program error. Error description Error Message: The java class could not be loa ...

  6. XDocument读取xml的所有元素以及XPath语法

    原文  http://www.cnblogs.com/xxyishutong/p/3326375.html <?xml version="1.0" encoding=&quo ...

  7. 运用JavaScript构建你的第一个Metro式应用程序(onWindows 8)(二)

    原文 http://blog.csdn.net/zhangxin09/article/details/6793330 先前的学习中,我们已经了解了 Metro式的 JavaScript 应用程序大致如 ...

  8. UVA1351-----String Compression-----区间DP(记忆化搜索实现)

    本文出自:http://blog.csdn.net/dr5459 题目地址: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&a ...

  9. C++ Placement New

    先看一个题目: #include <stdio.h> #include <iostream> using namespace std; struct Base { int j; ...

  10. flash跨域策略文件crossdomain.xml

    flash在跨域时唯一的限制策略就是crossdomain.xml文件,该文件限制了flash是否可以跨域读写数据以及允许从什么地方跨域读写数据. 位于www.a.com域中的SWF文件要访问www. ...