欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-01 13:46:10
...

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原子操作以及更多协议支持

   
    有兴趣的瞧瞧,提提建议。