zoukankan      html  css  js  c++  java
  • java MemCachedClient遍历memcache中所有的key

          在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;
    	}




  • 相关阅读:
    jQuery事件
    jQuery的效果
    jQuery 选择器
    中级 jQuery 了解
    回调函数 callback()
    预加载
    表格对象的方法
    script中type属性讲解
    将数据渲染到页面的方式:模版
    将数据渲染到页面的几种方式
  • 原文地址:https://www.cnblogs.com/james1207/p/3292080.html
Copyright © 2011-2022 走看看