redis取值fst序列化异常

问题描述:

    我是用spring-boot 向redis中写入的数据,然后用jfinal的redis插件取值,出现异常。

    初步判断应该是序列化方式不同。

    请问这样的情况该如何取值?

异常信息:

java.lang.RuntimeException: java.io.IOException: java.lang.NullPointerException
	at com.jfinal.plugin.redis.serializer.FstSerializer.valueFromBytes(FstSerializer.java:78)
	at com.jfinal.plugin.redis.Cache.valueFromBytes(Cache.java:1211)
	at com.jfinal.plugin.redis.Cache.get(Cache.java:91)
	at com.xinzhuzhang.qianghuopro.controller.inner.WXController.test(WXController.java:26)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.jfinal.aop.Invocation.invoke(Invocation.java:73)
	at com.xinzhuzhang.qianghuopro.interceptor.GlobalActionExceptionInterceptor.intercept(GlobalActionExceptionInterceptor.java:20)
	at com.jfinal.aop.Invocation.invoke(Invocation.java:67)
	at com.jfinal.core.ActionHandler.handle(ActionHandler.java:74)
	at com.xinzhuzhang.qianghuopro.handler.APINOPageErrorHandler.handle(APINOPageErrorHandler.java:26)
	at com.xinzhuzhang.qianghuopro.handler.APIVersionHandler.handle(APIVersionHandler.java:48)
	at com.xinzhuzhang.qianghuopro.handler.FakeStaticHandler.handle(FakeStaticHandler.java:17)
	at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:72)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: java.lang.NullPointerException
	at org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:243)
	at com.jfinal.plugin.redis.serializer.FstSerializer.valueFromBytes(FstSerializer.java:75)
	... 32 more
Caused by: java.lang.NullPointerException
	at org.nustaq.serialization.FSTObjectInput.readObjectWithHeader(FSTObjectInput.java:353)
	at org.nustaq.serialization.FSTObjectInput.readObjectInternal(FSTObjectInput.java:327)
	at org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:307)
	at org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:241)
	... 33 more


评论区

JFinal

2017-08-02 15:57

这是一个空指针异常,建议单步调试解决一下

Joph_csu

2017-08-16 08:43

我使用FstSerializer也不时出现此类错误,换成JdkSerializer后就再也不出此类错误了

不能忍受

2018-02-05 18:46

我也出现了这个问题,对一个参数相同的model 两次序列化结果不同 导致set中取不到该值

badouyuren

2018-11-28 09:19

我给公司推荐使用了这个,结果也出现了类似的情况,很郁闷

xiongshiyan

2020-01-16 14:17

redis通过incr方法自增的value,无法获取到,报异常。
可能是incr方法设置的类型是long,但是无法反序列化回来,fst或者jdk的序列化器都不行

JFinal

2020-01-16 14:51

@xiongshiyan 获取自增数据要使用 getCounter(...) 方法

青山楼外楼

2020-11-25 11:01

@JFinal 您好,我是用jfinal的redis存入数据,jfinal存入时,会进行序列化,我使用其他项目取数据时就为空;请问,这个序列化该如何处理?

JFinal

2020-11-25 12:50

@青山楼外楼 其它项目中也使用同样的序列化算法就可以了

青山楼外楼

2020-12-24 17:41

@JFinal 哦哦 好的,我也解决这个问题了 我新建MySerializer类去实现了ISerializer接口就可以选者不使用序列化。