xmemcached是基于java nio实现的memcached客户端API。
实际上是基于我实现的一个简单nio框架 http://code.google.com/p/yanf4j/的基础上实现的(目前是基于yanf4j 0.52),核心代码不超过1000行,序列化机制直接挪用spymemcached的Transcoder。
性能方面,在读写简单类型上比之spymemcached还是有差距,在读写比较大的对象(如集合)有效率优势。
当 前0.50-beta版本,仅支持单个memcached服务器,以后考虑扩展。目前已经支持get、set、add、replace、delete、 incr、decr、version这几个协议。API为阻塞模型,而非spymemcached的异步模式,异步模型在批处理的时候有优势,但是阻塞模 式在编程难度和使用上会容易很多。
2、为什么叫xmemcached?
因为我在厦门(XM)混饭......
3、xmemcached的下载和使用
项目主页:http://code.google.com/p/xmemcached/
下载地址:http://code.google.com/p/xmemcached/downloads/list
下载的压缩包中包括了依赖库、源码和打包后的jar,放到项目的lib目录下即可使用。
示例参考:
package net.rubyeye.xmemcached.test; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.io.Serializable; import net.rubyeye.xmemcached.XMemcachedClient; class Name implements Serializable { String firstName; String lastName; int age; int money; public Name(String firstName, String lastName, int age, int money) { super (); this .firstName = firstName; this .lastName = lastName; this .age = age; this .money = money; } public String toString() { return " [ " + firstName + " " + lastName + " ,age= " + age + " ,money= " + money + " ] " ; } } public class Example { public static void main(String[] args) { try { String ip = " 192.168.222.100 " ; int port = 11211 ; XMemcachedClient client = new XMemcachedClient(ip, port); // 存储操作 if ( ! client.set( " hello " , 0 , " dennis " )) { System.err.println( " set error " ); } client.add( " hello " , 0 , " dennis " ); client.replace( " hello " , 0 , " dennis " ); // get操作 String name = (String) client.get( " hello " ); System.out.println(name); // 批量获取 List < String > keys = new ArrayList < String > (); keys.add( " hello " ); keys.add( " test " ); Map < String, Object > map = client.get(keys); System.out.println( " map size: " + map.size()); // delete操作 if ( ! client.delete( " hello " , 1000 )) { System.err.println( " delete error " ); } // incr,decr client.incr( " a " , 4 ); client.decr( " a " , 4 ); // version String version = client.version(); System.out.println(version); // 增删改查自定义对象 Name dennis = new Name( " dennis " , " zhuang " , 26 , - 1 ); System.out.println( " dennis: " + dennis); client.set( " dennis " , 0 , dennis); Name cachedPerson = (Name) client.get( " dennis " ); System.out.println( " cachedPerson: " + cachedPerson); cachedPerson.money = - 10000 ; client.replace( " dennis " , 0 , cachedPerson); Name cachedPerson2 = (Name) client.get( " dennis " ); System.out.println( " cachedPerson2: " + cachedPerson2); // delete client.delete( " dennis " ); System.out.println( " after delete: " + client.get( " dennis " )); client.shutdown(); } catch (Exception e) { e.printStackTrace(); } } }4、xmemcached的计划?
1)、添加多服务器和集群支持
2)、性能优化、重构
3)、添加cas原子操作以及更多协议支持
有兴趣的瞧瞧,提提建议。
文章转自庄周梦蝶 ,原文发布时间2009-03-03
相关资源:Java的开源高性能memcached客户端XMemcached.zip