Redis Plugin的bug

blob.png

通过Redis.use().incr("key")的数据,Redis.use().get("key")获取不到。

评论区

JFinal

2016-12-06 15:51

由于 redis 只能存 String 与 byte[] 这两种数据,而 java 的数据类型有很多,除了基本类型以外,还有对象类型要存放,所以大部分 java 客户端都会有用先将所有 java 类型转换类型为 byte[] 再存放

还有一种方式可以尝试就是,String 类型原样保存,其它类型转成 byte[] 类型存放,这种方式有个麻烦,就是在获取数据时,你需要想办法知道当前数据需不需要做反向序列化,因为你拿到的数据可能是某种类型转成 byte[] 后存的,也可能是 String 原样存的

基于上面的原因,jfinal 选择第一种方式,存之前全部序列化,取之前全部反序列化。而楼主碰到的问题是,存的那个incr 自增数据并不是 jfinal 存的,而是自动生成的,而取数据的时候却是用的 jfinal 的 api

这个问题是个比较纠结的问题,很早就备忘了,一直没有时间处理。未来可能的处理方式是,在获取数据以后,对数据类型做一下预测,需要反向序列化时才去反向序列化,只不过这个方案不是很优雅,对性能也会有些损失

最后,感谢你的反馈,后续版本会改进这里

IvyHelen

2016-12-07 16:03

http://www.jfinal.com/feedback/430
临时的解决方案可以采用这个
最后测试发现,可以这么使用:
Redis.use().incr("OnlyTest");
Redis.use().getJedis().get("OnlyTest");
Redis.use().getJedis().close();
这样输出System.out.println(Redis.use().getJedis().get("OnlyTest")); 是没有错误的

热门反馈

扫码入社