【转】JAVA客户端调用memcached比较
转自http://blog.chinaunix.net/space.php?uid=20787846&do=blog&id=1841943 , 有趣的是这篇文章测试结果显示上篇转载的ali client性能有问题,那篇文章还说是优化了whalin,结果反而不如它,不知怎么回事! 蓝色字是博主加的加重标记或是注解。 最新版本:java_memcached-release_2.0.1 操作示例: 2.spymemcached客户端API:spymemcached client 网址:http://code.google.com/p/spymemcached/ 最新版本:memcached-2.1.jar 操作示例: 用spymemcached将对象存入缓存 用spymemcached从缓存中取得对象 最新版本: alisoft-xplatform-asf-cache-2.5.2.jar <client name="mclient0" compressEnable="true" defaultEncoding="UTF-8" socketpool="pool0"> <errorHandler>com.moit.xplatform.asf.cache.memcached.MemcachedErrorHandler</errorHandler> </client> <client name="mclient1" compressEnable="true" defaultEncoding="UTF-8" socketpool="pool1"> <errorHandler>com.moit.xplatform.asf.cache.memcached.MemcachedErrorHandler</errorHandler> </client> <client name="mclient2" compressEnable="true" defaultEncoding="UTF-8" socketpool="pool2"> <errorHandler>com.moit.xplatform.asf.cache.memcached.MemcachedErrorHandler</errorHandler> </client> <socketpool name="pool0" failover="true" initConn="5" minConn="5" maxConn="250" maintSleep="0" nagle="false" socketTO="3000" aliveCheck="true"> <servers>192.168.3.251:11211,192.168.3.251:11211</servers> </socketpool> <socketpool name="pool1" failover="true" initConn="5" minConn="5" maxConn="250" maintSleep="0" nagle="false" socketTO="3000" aliveCheck="true"> <servers>192.168.3.251:11211,192.168.3.251:11211</servers> </socketpool> <socketpool name="pool2" failover="true" initConn="5" minConn="5" maxConn="250" maintSleep="0" nagle="false" socketTO="3000" aliveCheck="true"> <servers>192.168.3.251:11211,192.168.3.251:11211</servers> </socketpool> </cluster> if(cache.containsKey("key")) { System.out.println("包含了key的数据"); System.out.println("从cache服务器获得key值"); } else { System.out.println("没有包含了key的数据"); System.out.println("cache服务器,没有数据,则去取数据库数据!"); } 例子: static ICacheManager<IMemcachedCache> manager; * 测试MemCached * @return */ public String memcache() { MemcachedCacheManager.class.getName()); manager.start(); try { IMemcachedCache cache = manager.getCache("mclient0"); //根据key得到缓存数据 String a =(String)cache.get("key"); //用containsKey方法判断cache服务器按指定的key值是否存在。 System.out.println("是否包含了key的数据="+cache.containsKey("key")); if(cache.containsKey("key")) { System.out.println("包含了key的数据"); System.out.println("从cache服务器获得key值"); } else { System.out.println("没有包含了key的数据"); System.out.println("cache服务器,没有数据,则去取数据库数据!"); } //根据key删除服务器上的对应的缓存数据 cache.remove("key"); //根据key保存数据到服务器上 cache.put("key", "你好!"); calendar.setTime(new Date()); calendar.add(Calendar.MINUTE, 30);// cache.remove("keytime"); cache.put("keytime", "30分钟后过期",calendar.getTime()); System.out.println("30分钟后过期=keytime="+cache.get("keytime")); System.out.println("cache服务器getTime="+calendar.getTime()); } 总结:三种API比较 memcached client for java:较早推出的memcached JAVA客户端API,应用广泛,运行比较稳定。 [注:这个是meetup正在使用的]
网址:http://code.google.com/p/memcache-client-forjava/
<memcached>
<memCachedClients>mclient1,mclient2</memCachedClients>
System.out.println("是否包含了key的数据="+cache.containsKey("key"));
/**
manager = CacheUtil.getCacheManager(IMemcachedCache.class,
//设置带有过期时间的例子
Calendar calendar = Calendar.getInstance();//当前日期
}finally{ manager.stop();}
return "testmempage";
spymemcached:A simple, asynchronous, single-threaded memcached client written in java. 支持异步,单线程的memcached客户端,用到了java1.5版本的concurrent和nio,存取速度会高于前者,但是稳定性不好,测试中常报timeOut等相关异常。
由于memcached client for java发布了新版本,性能上有所提高,并且运行稳定,所以建议使用memcached client for java。