`

使用Java代码遍历Memcached的Items

阅读更多

import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.able.util.LogUtil;
import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
import com.danga.MemCached.SockIOPool.SockIO;

public class MemCacheInvoke {
 protected static MemCachedClient mc = new MemCachedClient();

 static {

  // 设置缓存服务器列表
  String[] servers = { "192.168.9.160:11211"};

  // 设置服务器权重
  Integer[] weights = { 10 };

  // 创建一个Socked连接池实例
  SockIOPool pool = SockIOPool.getInstance();

  // 向连接池设置服务器和权重
  pool.setServers(servers);
  pool.setWeights(weights);

  // set some TCP settings
  // disable nagle
  // set the read timeout to 3 secs
  // and don't set a connect timeout
  pool.setNagle(false);
  pool.setSocketTO(3000);
  pool.setSocketConnectTO(0);

  // initialize the connection pool
  pool.initialize();
 }

 public static void main(String[] args) {
  //  mcc.set("foo3", "This is a test String");
  // mcc.delete("foo");
  // String bar = mcc.get("foo3").toString();
  long startDate = System.currentTimeMillis();

  for (int i = 0; i < 100; i++) { 
    mc.add("test"+i , "中国"+i); 
  } 
  
  System.out.print(" get value : " + mc.get("test1"));
  long endDate = System.currentTimeMillis();

  long nowDate = (endDate - startDate) / 1000;

  //  System.out.println(nowDate); 

  // System.out.println("="+mc.statsItems());

      MemCacheInvoke aa=new MemCacheInvoke();
      aa.getKeys();

  // System.out.println("aa="+ mc.statsCacheDump(0, 100).toString());

 }

 public void getKeys() {
  List<String> logs = new ArrayList<String>();
  System.out.println(mc.stats());
  logs.add(mc.stats().toString());
  logs.add(" -- end stats --");
  //ArrayList keys = new ArrayList();
  // 取得 所有 memcached server ,可能有多台 server
  Map slabs = mc.statsItems();
  logs.add(slabs.toString());
  logs.add(" -- end statsItems --");
  // key= ip:port, ex: 192.168.1.2:11211,192.168.1.2:11212...
  Iterator itemsItr = slabs.keySet().iterator();

  // 以server IP key值去迴圈,可能有多台 server
  while (itemsItr.hasNext()) {
   String serverInfo1 = itemsItr.next().toString();
   // 取得這個server的各種 status [itemname:number:field=value]
   Map itemNames = (Map) slabs.get(serverInfo1);
   Iterator itemNameItr = itemNames.keySet().iterator();

   // 以status key值去迴圈
   while (itemNameItr.hasNext()) {
    String itemName = itemNameItr.next().toString();
    // 拆解status 欄位
    // itemAtt[0] = itemname
    // itemAtt[1] = CacheDump的參數
    // itemAtt[2] = field:number or age
    String[] itemAtt = itemName.split(":");
    // 要取得field為number的CacheDump參數
    if (itemAtt[2].startsWith("number")) {
     // 以status取到的參數,取得cachedDump Map...(下面Map名稱命錯了)
     // ServerIP<cachekey<byte size;unix timestamp>>
     Map chcheDump = mc.statsCacheDump(Integer.parseInt(itemAtt[1]), 0);
     //ystem.out.println(chcheDump);
     Iterator itr = chcheDump.keySet().iterator();
     // 以server IP key值去迴圈,可能有多台 server
     int i = 0;
     while (itr.hasNext()) {
      // key=ip:port
      String serverInfo2 = itr.next().toString();
      // 取得Cached Key Map...<-終於,這才是我要的Key集合
      Map items = (Map) chcheDump.get(serverInfo2);
      //System.out.println(items);
      Iterator keyItr = items.keySet().iterator();
      //以Cached Key 去迴圈,取key出來,或是要取size,unix timestamp 也有
      while (keyItr.hasNext()) {
       String key = keyItr.next().toString();
       String memKey = key;
       i++;
       try {
        key = URLDecoder.decode(key, "UTF-8");
        String value = ((String) items.get(memKey));
        value = value.substring(value.indexOf(";") + 2, value.indexOf(" s"));
        Date date = new Date();
        date.setTime(Long.valueOf(value + "000"));
        logs.add(key + " --- " + items.get(memKey) + " -- " + value + " -- " + date);
        //System.out.println(key + " --- " + items.get(memKey) + " -- " + value + " -- " + date);
       } catch (Exception ex) {
        logs.add("error:" + ex.getMessage());
        //System.out.println("error:" + ex.getMessage());
       }
      }
     }
    }
   }
  }
  LogUtil.commandlog(logs,"/var/www/log/memcached.log");
 }

}

分享到:
评论

相关推荐

    java遍历Memcache详细代码

    以下是一份详细的Java代码示例,展示如何高效地遍历并操作Memcache中的数据。 首先,我们需要引入Memcached的Java客户端库,如Spymemcached或Xmemcached。在这个例子中,我们使用Spymemcached,因为它是一个流行的...

    java连接memcached示例代码

    下面我们将详细探讨如何在Java中使用Memcached以及相关知识点。 首先,我们需要引入一个Java库来与Memcached通信,例如spymemcached或xmemcached。这两个库提供了Java客户端,方便我们进行API调用。这里以...

    memcached安装及java应用使用memcached

    “memcached安装及java应用使用memcached”这一标题暗示了我们要讨论的是一个关于分布式内存缓存系统——memcached的安装过程以及如何在Java应用程序中使用它。Memcached是一个高性能、轻量级的分布式内存对象缓存...

    Java环境下Memcached应用详解.docx

    这样可以使代码对具体缓存实现(如Memcached或Ehcache)不敏感,只需通过配置指定使用哪种缓存服务。 2. **Hibernate Provider**:如果使用Hibernate作为ORM框架,可以自定义Hibernate缓存提供者,将Memcached作为...

    java使用Memcached简单教程

    ### Java使用Memcached简单教程 #### 一、简介 Memcached是一个高性能的分布式内存对象缓存系统,通过减轻数据库负载来加速动态Web应用,提高网站的浏览速度。它通过在内存中缓存数据和对象来减少读取数据库的次数...

    java 遍历 memcache key 源码

    java 遍历 memcache key 源码 方法

    java中连接memcached服务器

    接下来,我们将深入探讨如何在Java环境中配置和使用Memcached。 首先,要连接到Memcached服务器,你需要一个Java客户端库。常见的有spymemcached和XMemcached。这里我们以spymemcached为例,因为它是社区中广泛使用...

    java使用memcached的实例

    本文将详细解析如何在Java项目中使用Memcached,包括其配置方法以及一个具体的示例代码,旨在帮助开发者深入理解并掌握这一技术。 ### 一、Memcached简介 Memcached是一种开源的高性能内存键值存储系统,主要用于...

    JAVA+MYSQL+Memcached

    在提供的文件"memcache学习总结(java版-winwods).docx"中,可能详细介绍了如何在Windows环境下使用Java来操作Memcached,包括安装步骤、配置以及基本的增删查改操作。 至于"Memcached_1.2.5.zip",这应该是...

    oracle掉用memcached,得用oracle调用java,java调用memcached

    开发人员会使用这个库编写Java代码,实现设置和获取缓存值的接口。 4. **设置和获取缓存值**:`setMemValue.sql`和`getMemValue.sql`可能分别包含设置和检索缓存值的存储过程。这些过程会调用之前加载到Oracle的...

    java_memcached-release_2.5.1.jar Memcache java jar 包

    在实际开发中,使用`java_memcached-release_2.5.1.jar`,开发者可以轻松地将Memcached集成到Java应用中,从而提升应用的性能。`MemCachedManager.java`这个类可能包含了创建和管理Memcached连接、执行缓存操作等...

    java-memcached-2.6.6.jar

    java-memcached-2.6.6.jar

    java+memcached所需文件

    以下是一个简单的Java代码示例,演示了如何使用Spymemcached连接到Memcached服务器并进行操作: ```java import net.spy.memcached.MemcachedClient; import net.spy.memcached.BinaryConnectionFactory; public ...

    memcached安装包以及java所需的memcached架包

    2. **初始化连接**:在代码中,首先需要创建一个Memcached客户端实例,通常使用Spymemcached或XMemcached等客户端库,指定memcached服务器的地址和端口。 3. **操作缓存**:现在你可以开始进行基本的缓存操作,如`...

    memcached-1.2.1-win32.zip 和 java_memcached-release_1.6.zip

    3. **编写Java代码**: - 引入必要的依赖:`import net.spy.memcached.MemcachedClient;` - 创建Memcached客户端实例,连接到服务器:`MemcachedClient client = new MemcachedClient(new InetSocketAddress(...

    Memcached java的使用实例

    接下来,让我们看看如何在Java代码中使用Memcached。首先,我们需要创建一个`MemcachedClient`实例,连接到运行的Memcached服务器: ```java import net.spy.memcached.AddrUtil; import ...

    java_memcached-release_2.6.2.jar

    java_memcached-release_2.6.2.jar java缓存工具 memcached

Global site tag (gtag.js) - Google Analytics