程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 基於java nio的memcached客戶端 - xmemcached

基於java nio的memcached客戶端 - xmemcached

編輯:關於JAVA

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved