JFinal的redis取值问题

zhangpengyue1985 发布于 2016/02/16 14:40
阅读 1K+
收藏 0
@JFinal ,波总,不知道您是否有时间看,最近在用2.2,在用到redis存取list的时候取出来的值多一个中括号,我在存的时候是没有的。
加载中
1
z
zhangpengyue1985

引用来自“JFinal”的评论

贴出存与取的具体代码

写的太乱,不太好意思全贴,麻烦波总

Cache cache = RedisKit.use(Constants.GOODS_REDIS_KEY_NAME);

List<Record> indexDisplayGoodsList = null;
if (start != null && end != null) {
// 判断该key是否存在
if (cache.exists(Constants.REDIS_PHONE_GOODS_INDEXDISPLAY_CACHE_KEY)) {
indexDisplayGoodsList = cache.lrange(Constants.REDIS_PHONE_GOODS_INDEXDISPLAY_CACHE_KEY,0,-1);
}
}
if (indexDisplayGoodsList == null) {
if (StrKit.notBlank(lat) && StrKit.notBlank(lng)) {
StringBuilder sql = new StringBuilder();
sql.append("(select * from t");
indexDisplayGoodsList = Db.find(sql.toString(), lat, lat, lng, lat, lat, lng);
if (indexDisplayGoodsList != null) {
cache.lpush(Constants.REDIS_PHONE_GOODS_INDEXDISPLAY_CACHE_KEY, indexDisplayGoodsList);
cache.expire(Constants.REDIS_PHONE_GOODS_INDEXDISPLAY_CACHE_KEY, 60 * 60 * 2);
}
}
}
return indexDisplayGoodsList;
JFinal
JFinal
回复 @zhangpengyue1985 : jfinal 的 redis plugin 是自动做的序列化与反序列化,所以这个过程不需要干预,只需要用好所提供的api就可以,无论你lpush 的是什么类型的数据,lrange出来的都是一个list,这个是api决定的,具体数据需要从这个返回的list中再取一次
z
zhangpengyue1985
回复 @JFinal : 波总,我直接给list(0)取出来,indexDisplayGoodsList = (List<Record>) list.get(0);就可以用了。
z
zhangpengyue1985
回复 @JFinal : 我的感觉也是这样,但是不知道如何去处理。我以为jfinal里有写好的方法。我找到了ISerializer iSerializer = cache.getSerializer();,但是仔细看了下api,效果不是很理想。
JFinal
JFinal
这种情况应该是正常的,因为用的是redis的list相关api,所以存数据时被当成是list中的元素,而取数据时redis自动将元素放入一个新建的list之中,所以原来的list元素被新建的list再套了一层,建议仔细研究一下lpush、lrange的用法
0
z
zhangpengyue1985
我存的时候是List<Record>,我取的时候应该怎么取呢?我直接cache.lrange(key,0,-1)取的时候就是上图的效果。
0
z
zhangpengyue1985
是需要先valuetobyte,然后再valuefrombyte?
0
JFinal
JFinal
贴出存与取的具体代码
0
z
zhangpengyue1985

引用来自“JFinal”的评论

贴出存与取的具体代码
波总,非常感谢您的关注,indexDisplayGoodsList = cache.lrange(Constants.REDIS_PHONE_GOODS_INDEXDISPLAY_CACHE_KEY,0,-1);取,cache.lpush(Constants.REDIS_PHONE_GOODS_INDEXDISPLAY_CACHE_KEY, indexDisplayGoodsList);存
z
zhangpengyue1985
回复 @JFinal : 波总,存数据的时候只有一个中括号,但是取的时候是有两个中括号,在图片里非常清楚,我想问下,jfinal在使用redis的时候是不是也需要自己去序列化与反序列化
z
zhangpengyue1985
回复 @JFinal : 不可以用,提示无法转换成List<Record>,我打断点看数据,里面多一个括号。
JFinal
JFinal
取出来的值是可以直接使用了吧
返回顶部
顶部