各位看官看过来,遇到1个Memcached奇葩问题

红番茄 发布于 2014/08/05 10:30
阅读 387
收藏 0
List tourList   =  tourDao.getTourInfo(sql, params);
logger.info("------------tourList----------------:"+tourList);
if(tourList.size() !=0 && tourList !=null){
logger.info("------------添加tourList----------------");
MemcachedUtils.cachedClient.add("aaaa", tourList,
new Date( 60 * 60 * 1000));
}

logger.info("------------获取缓存----------------:"+MemcachedUtils.cachedClient.get("aaaa"));


这里tourList查到数据后往Mem里放,然后马上获取,结果是NULL,我用命令方式去获取又能获取到,求解,太奇葩了

加载中
0
鉴客
鉴客

List 里的对象有没有实现序列化接口呢?

红番茄
红番茄
序列化了的 set/add的时候提示true
0
char1st
char1st
是什么客户端? 估计多半是flags的问题。
红番茄
红番茄
JAVA的
0
char1st
char1st

java客户端应该是取到了返回的消息的,只是没有解析出来,你直接用telnet get 的时候看下 flags是多少?


红番茄
红番茄
get出来的就是我存入的内容 怎么看flags
红番茄
红番茄
telnet 可以获取到数据,代码就不行,我其他地方写的都OK的奇怪得很
0
如果‘先生
如果‘先生
首先确保memcache连接成功
红番茄
红番茄
都存入进去了 连接还不成功?
0
char1st
char1st
get test3
VALUE test3 0 167
srjava.util.ArrayListx佉櫱a?Isizexpw
                                            srcom.meetup.memcached.test.Pojo翝Y.>gQ?LidtLjava/lang/String;Lnameq~xpt1q~sq~t2q~x
END



test3是key,在test3后面的0就是flags,167是长度,后面的乱码是序列化后的value.

你可以用Wireshark抓下包,可以直接过滤memcache协议,之后follow tcp stream看下memcached服务端到底有没有返回。



红番茄
红番茄
get tourindex14VALUE tourindex14 8 15123
0
char1st
char1st

     我先用的是com.danga 的客户端add 一个list之后flags是0,可以get到反序列化之后的list.之后改用com.meetup客户端add一个list之后flags是8,和你上面贴的那条记录一样flags是8,也可以get到反序列化之后的list .如果交叉使用就会是null.但是我就不知道你那边到底是怎么add 和get 的.



红番茄
红番茄
我add之后马上get都获取不到数据
返回顶部
顶部