基于java nio的memcached客户端——xmemcached
JavamemcachedGoogle编程Gmail
1、xmemcached是什么?
xmemcached是基于javanio实现的memcached客户端API。
实际上是基于我实现的一个简单nio框架http://code.google.com/p/yanf4j/的基础上实现的(目前是基于yanf4j0.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目录下即可使用。
示例参考:
<!---->packagenet.rubyeye.xmemcached.test;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Map;
importjava.io.Serializable;
importnet.rubyeye.xmemcached.XMemcachedClient;
classNameimplementsSerializable{
StringfirstName;
StringlastName;
intage;
intmoney;
publicName(StringfirstName,StringlastName,intage,intmoney){
super();
this.firstName=firstName;
this.lastName=lastName;
this.age=age;
this.money=money;
}
publicStringtoString(){
return"["+firstName+""+lastName+",age="+age+",money="
+money+"]";
}
}
publicclassExample{
publicstaticvoidmain(String[]args){
try{
Stringip="192.168.222.100";
intport=11211;
XMemcachedClientclient=newXMemcachedClient(ip,port);
//存储操作
if(!client.set("hello",0,"dennis")){
System.err.println("seterror");
}
client.add("hello",0,"dennis");
client.replace("hello",0,"dennis");
//get操作
Stringname=(String)client.get("hello");
System.out.println(name);
//批量获取
List<String>keys=newArrayList<String>();
keys.add("hello");
keys.add("test");
Map<String,Object>map=client.get(keys);
System.out.println("mapsize:"+map.size());
//delete操作
if(!client.delete("hello",1000)){
System.err.println("deleteerror");
}
//incr,decr
client.incr("a",4);
client.decr("a",4);
//version
Stringversion=client.version();
System.out.println(version);
//增删改查自定义对象
Namedennis=newName("dennis","zhuang",26,-1);
System.out.println("dennis:"+dennis);
client.set("dennis",0,dennis);
NamecachedPerson=(Name)client.get("dennis");
System.out.println("cachedPerson:"+cachedPerson);
cachedPerson.money=-10000;
client.replace("dennis",0,cachedPerson);
NamecachedPerson2=(Name)client.get("dennis");
System.out.println("cachedPerson2:"+cachedPerson2);
//delete
client.delete("dennis");
System.out.println("afterdelete:"+client.get("dennis"));
client.shutdown();
}catch(Exceptione){
e.printStackTrace();
}
}
}
4、xmemcached的计划?
1)、添加多服务器和集群支持
2)、性能优化、重构
3)、添加cas原子操作以及更多协议支持
有兴趣的瞧瞧,提提建议。