在缓存对象到memcached时,可以直接把对象缓存到memcached中,也可以先把对象转成字符串格式,然后在缓存到memcached中,经过测试,用jaskson把对象转成字符串然后缓存到memcached中比直接把对象缓存到memcached中效率高,测试结果如下:
serialize 10000 obj time : 2455
deserialization 10000 obj time : 2319
serialize 10000 jaskson time : 1685
deserialization 10000 jaskson time : 1508
贴出代码:
import java.util.ArrayList;
import net.rubyeye.xmemcached.MemcachedClient;
import net.rubyeye.xmemcached.MemcachedClientBuilder;
import net.rubyeye.xmemcached.XMemcachedClientBuilder;
import net.rubyeye.xmemcached.utils.AddrUtil;
import org.codehaus.jackson.map.ObjectMapper;
public class TestMem {
private static MemcachedClient client = null;
private static ObjectMapper objectMapper = new ObjectMapper();
/**
* @param args
*/
public static void main(String[] args) {
String ip = "127.0.0.1:11211";
MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses(ip));
try {
client = builder.build();
TeamRoom tr = new TeamRoom();
tr.setRoomID(1);
tr.setCreateUserID(1);
tr.setRoomName("test");
tr.setUserList(new ArrayList<Integer>());
int size = 100000;
// memcached直接序列化自定义对象
long startTime = System.currentTimeMillis();
for (int i = 0; i < size; i++) {
client.set("key" + i, 0, tr);
}
long endTime = System.currentTimeMillis();
long diffTime = endTime - startTime;
System.out.println("serialize " + size + " obj time : " + diffTime);
// memcached直接反序列化自定义对象
startTime = System.currentTimeMillis();
for (int i = 0; i < size; i++) {
TeamRoom teamRoom = (TeamRoom) client.get("key" + i);
}
endTime = System.currentTimeMillis();
diffTime = endTime - startTime;
System.out.println("deserialization " + size + " obj time : " + diffTime);
// jaskson序列化自定义对象
startTime = System.currentTimeMillis();
for (int i = 0; i < size; i++) {
String value = objectMapper.writeValueAsString(tr);
client.set("key" + i, 0, value);
}
endTime = System.currentTimeMillis();
diffTime = endTime - startTime;
System.out.println("serialize " + size + " jaskson time : " + diffTime);
// jaskson反序列化自定义对象
startTime = System.currentTimeMillis();
for (int i = 0; i < size; i++) {
String str = (String) client.get("key" + i);
TeamRoom teamRoom = objectMapper.readValue(str, TeamRoom.class);
}
endTime = System.currentTimeMillis();
diffTime = endTime - startTime;
System.out.println("deserialization " + size + " jaskson time : " + diffTime);
} catch (Exception e) {
e.printStackTrace();
}
}
}