天天看點

基于java nio的memcached用戶端——xmemcached

<b>1、xmemcached是什麼?</b>

xmemcached是基于java nio實作的memcached用戶端api。

性能方面,在讀寫簡單類型上比之spymemcached還是有差距,在讀寫比較大的對象(如集合)有效率優勢。

當 前0.50-beta版本,僅支援單個memcached伺服器,以後考慮擴充。目前已經支援get、set、add、replace、delete、 incr、decr、version這幾個協定。api為阻塞模型,而非spymemcached的異步模式,異步模型在批處理的時候有優勢,但是阻塞模 式在程式設計難度和使用上會容易很多。

2、為什麼叫xmemcached?

因為我在廈門(xm)混飯......

3、xmemcached的下載下傳和使用

下載下傳的壓縮包中包括了依賴庫、源碼和打包後的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&lt;string&gt; keys = new arraylist&lt;string&gt;();

            keys.add("hello");

            keys.add("test");

            map&lt;string, object&gt; 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