在学习使用Java_Memcache操作memcache后,饶有兴趣的研究了一下Java_Memcache的源码。Java_Memcache在类AscIIClient中封装了数据操作方法set/add/delete/append/get等。
存储数据set
由Memcache命令详解,我们知道memcache原始的set命令格式为
set <key> <flag> <expiretime> <bytes> \r\n
<value> \r\n
而在Java_Memcache中set操作数据最始调用的是set(String, String, Object, Date, Integer, Long, flag)方法。
private boolean set(String s, String s1, Object obj, Date date, Integer integer, Long long1, boolean flag)
{
SchoonerSockIO schoonersockio;
int i;
String s2;
......
s1 = sanitizeKey(s1);
......
schoonersockio = pool.getSock(s1, integer);
if(schoonersockio == null)
{
if(errorHandler != null)
errorHandler.handleErrorOnSet(this, new IOException("no socket to server available"), s1);
return false;
}
if(date == null)
date = new Date(0L);
i = NativeHandler.getMarkerFlag(obj);
s2 = s + " " + s1 + " " + i + " " + date.getTime() / 1000L + " ";
boolean flag1;
schoonersockio.writeBuf.clear();
schoonersockio.writeBuf.put(s2.getBytes());
int j = schoonersockio.writeBuf.position();
schoonersockio.writeBuf.put(BLAND_DATA_SIZE);
if(long1.longValue() != 0L)
schoonersockio.writeBuf.put((new StringBuilder()).append(" ").append(long1.toString()).toString().getBytes());
schoonersockio.writeBuf.put(B_RETURN);
SockOutputStream sockoutputstream = ne