庄周梦蝶

生活、程序、未来
   :: 首页 ::  ::  :: 聚合  :: 管理

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

Posted on 2009-03-03 16:31 dennis 阅读(3126) 评论(6)  编辑  收藏 所属分类: javamy open-source
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原子操作以及更多协议支持

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


评论

# re: 基于java nio的memcached客户端——xmemcached  回复  更多评论   

2009-03-03 17:40 by jtuki
汝太强大鸟.. 好东西一个接一个的弄出来.. -_-

# re: 基于java nio的memcached客户端——xmemcached  回复  更多评论   

2009-03-03 17:57 by yanghuan
dennis同学已经搞了两个开源项目了,太强大了.

# re: 基于java nio的memcached客户端——xmemcached  回复  更多评论   

2009-03-03 18:00 by dennis
@yanghuan
不敢说开源,没啥人用,自娱自乐罢了

# re: 基于java nio的memcached客户端——xmemcached  回复  更多评论   

2009-03-03 21:15 by Joshua Zhu
绝大数的伟大的开源软件都是从自娱自乐开始的。加油,庄老大!

# re: 基于java nio的memcached客户端——xmemcached  回复  更多评论   

2009-03-08 13:03 by onceloser
really ’zhuang‘ ability :)

# re: 基于java nio的memcached客户端——xmemcached  回复  更多评论   

2009-03-09 08:55 by dennis
@onceloser
我会把这理解成鼓励 :D

只有注册用户登录后才能发表评论。


网站导航: