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

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

时间: 2024-07-29 02:16:24

基于java nio的memcached客户端——xmemcached的相关文章

基于java nio的memcached客户端

1.xmemcached是什么? xmemcached是基于java nio实现的memcached客户端API. 实际上是基于我实现的一个简单nio框架 http://code.google.com/p/yanf4j/的基础上实现的(目前是基于yanf4j 0.52),核心代码不超过1000行,序列化机制直接挪用spymemcached的Transcoder. 性能方面,在读写简单类型上比之spymemcached还是有差距,在读写比较大的对象(如集合)有效率优势. 当前0.50-beta版本

基于java.nio.channels的编程实践-II

介绍 为了提供并发处理效率,把用户的请求连接随机分配到线程池的线程进行处理,hbase也是采用同样的方式处理用户请求的 客户端代码可以参考:基于java.nio.channels的编程实践-I 代码 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.chan

基于 Java 原生的 Http 客户端

A HttpNetClient for Java or Android. 一个基于Java原生的Http客户端. https://git.oschina.net/huanghaibin_dev/HttpNet 文章转载自 开源中国社区 [http://www.oschina.net]

基于java.nio.channels的编程实践-I

服务端代码 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketCh

Xmemcached v1.3.3发布 高性能可扩展的memcached客户端

Xmemcached是基于java nio实现的高性能可扩展的memcached客户端. 实际上是基于我实现的一个nio框架Yan4j的基础上实现的(目前是基于yanf4j 0.61-http://www.aliyun.com/zixun/aggregation/11220.html">snapshot),序列化机制使用spymemcached的Transcoder并做了部分改造. 1.支持更多协议,在已有协议支持的基础上添加了append.prepend.gets.批量gets.cas协

java nio框架netty 与tomcat的关系

问题描述 最近在研究http异步客户端. 看到了一堆名词,servlet3.0,jetty,tomcat,HttpAsyncClient netty,mina nio,nio2.0,iocp等等.略混乱   我的问题就是:netty跟tomcat是同样的概念么? netty官方说是个框架,那他是否还需要web容器支持?如果我客户端使用netty,服务端使用tomcat也是能连上的吧?是不是可以用netty的客户端和服务端 直接替换掉HttpAsyncClient和tomcat?    自己整理的

《Java NIO文档》非阻塞式服务器

即使你知道Java NIO 非阻塞的工作特性(如Selector,Channel,Buffer等组件),但是想要设计一个非阻塞的服务器仍然是一件很困难的事.非阻塞式服务器相较于阻塞式来说要多上许多挑战.本文将会讨论非阻塞式服务器的主要几个难题,并针对这些难题给出一些可能的解决方案. 查找关于非阻塞式服务器设计方面的资料实在不太容易,所以本文提供的解决方案都是基于本人工作和想法上的.如果各位有其他的替代方案或者更好的想法,我会很乐意听取这些方案和想法!你可以在文章下方留下你的评论,或者发邮件给我(

Azureus一个基于Java的BitTorrent客户端

Azureus是一个基于Java的http://www.aliyun.com/zixun/aggregation/33802.html">BitTorrent客户端,支持I2P和Tor匿名通讯协议.它支持Windows,Mac OS X,Linux和Unix操作系统.Azureus最早于2003年6月在Sourceforge.net发布,大部分是利用Eclipses上的Standard Widget Toolkit所作的实验性程序.它是现在最流行的BitTorrent客户端之一. 在英文用

memcached客户端源码分析

转载:memcached客户端源码分析 memcached的Java客户端有好几种,http://code.google.com/p/memcached/wiki/Clients 罗列了以下几种 Html代码   spymemcached          * http://www.couchbase.org/code/couchbase/java             o An improved Java API maintained by Matt Ingenthron and other