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