基于java nio的memcached客户端——xmemcached

    xiaoxiao2024-02-19  158

    1、xmemcached是什么?

    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
    最新回复(0)