springboot整合redis使用Lettuceke客户端超时问题

weixin_38054205 2019-06-19 04:30:23
问题:项目启动后,redis可正常运行几分钟,之后就连接不上报超时。重启工程后又可用一段时间。请教各位大牛

1. 包版本:

springboot2.1.2.RELEASE

spring-boot-starter-data-redis2.1.2.RELEASE

2. pom.xml



3. redis配置类



4. 配置属性



5. 运行一段时间后报错内容

sdj-cashier-api_1  | 2019-06-19 16:14:21.132 ERROR 1 --- [nio-8080-exec-2] sAspect$$EnhancerBySpringCGLIB$$aa3608f3 : redis error
sdj-cashier-api_1  | 
sdj-cashier-api_1  | org.springframework.dao.QueryTimeoutException: Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException: Command timed out after 500 millisecond(s)
sdj-cashier-api_1  |     at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:70)
sdj-cashier-api_1  |     at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41)
sdj-cashier-api_1  |     at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:44)
sdj-cashier-api_1  |     at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:42)
sdj-cashier-api_1  |     at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:268)
sdj-cashier-api_1  |     at org.springframework.data.redis.connection.lettuce.LettuceStringCommands.convertLettuceAccessException(LettuceStringCommands.java:799)
sdj-cashier-api_1  |     at org.springframework.data.redis.connection.lettuce.LettuceStringCommands.get(LettuceStringCommands.java:68)
sdj-cashier-api_1  |     at org.springframework.data.redis.connection.DefaultedRedisConnection.get(DefaultedRedisConnection.java:253)
sdj-cashier-api_1  |     at org.springframework.data.redis.connection.DefaultStringRedisConnection.get(DefaultStringRedisConnection.java:377)
sdj-cashier-api_1  |     at org.springframework.data.redis.core.DefaultValueOperations$1.inRedis(DefaultValueOperations.java:57)
sdj-cashier-api_1  |     at org.springframework.data.redis.core.AbstractOperations$ValueDeserializingRedisCallback.doInRedis(AbstractOperations.java:59)
sdj-cashier-api_1  |     at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:224)
sdj-cashier-api_1  |     at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:184)
sdj-cashier-api_1  |     at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:95)
sdj-cashier-api_1  |     at org.springframework.data.redis.core.DefaultValueOperations.get(DefaultValueOperations.java:53)
sdj-cashier-api_1  |     at com.sdj.cashier.api.common.utils.RedisUtils.get(RedisUtils.java:63)
sdj-cashier-api_1  |     at com.sdj.cashier.api.common.utils.RedisUtils.get(RedisUtils.java:71)
sdj-cashier-api_1  |     at com.sdj.cashier.api.common.utils.RedisUtils$$FastClassBySpringCGLIB$$49de4bf5.invoke(<generated>)
sdj-cashier-api_1  |     at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
sdj-cashier-api_1  |     at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
sdj-cashier-api_1  |     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
sdj-cashier-api_1  |     at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)
sdj-cashier-api_1  |     at com.sdj.cashier.api.common.aspect.RedisAspect.around(RedisAspect.java:30)
sdj-cashier-api_1  |     at sun.reflect.GeneratedMethodAccessor90.invoke(Unknown Source)
sdj-cashier-api_1  |     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
sdj-cashier-api_1  |     at java.lang.reflect.Method.invoke(Method.java:498)
sdj-cashier-api_1  |     at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)
sdj-cashier-api_1  |     at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)
sdj-cashier-api_1  |     at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
sdj-cashier-api_1  |     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
sdj-cashier-api_1  |     at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)
sdj-cashier-api_1  |     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
sdj-cashier-api_1  |     at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
sdj-cashier-api_1  |     at com.sdj.cashier.api.common.utils.RedisUtils$$EnhancerBySpringCGLIB$$fb9a0835.get(<generated>)
sdj-cashier-api_1  |     at com.sdj.cashier.api.modules.app.interceptor.AuthorizationInterceptor.preHandle(AuthorizationInterceptor.java:90)
sdj-cashier-api_1  |     at org.springframework.web.servlet.HandlerExecutionChain.applyPreHandle(HandlerExecutionChain.java:136)
sdj-cashier-api_1  |     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1033)
sdj-cashier-api_1  |     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
sdj-cashier-api_1  |     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
sdj-cashier-api_1  |     at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)
sdj-cashier-api_1  |     at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
sdj-cashier-api_1  |     at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
sdj-cashier-api_1  |     at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
sdj-cashier-api_1  |     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
sdj-cashier-api_1  |     at com.sdj.cashier.api.modules.app.filter.ChannelFilter.doFilter(ChannelFilter.java:44)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
sdj-cashier-api_1  |     at com.sdj.cashier.api.common.xss.XssFilter.doFilter(XssFilter.java:27)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
sdj-cashier-api_1  |     at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
sdj-cashier-api_1  |     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
sdj-cashier-api_1  |     at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
sdj-cashier-api_1  |     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
sdj-cashier-api_1  |     at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)
sdj-cashier-api_1  |     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
sdj-cashier-api_1  |     at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
sdj-cashier-api_1  |     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
sdj-cashier-api_1  |     at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
sdj-cashier-api_1  |     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
sdj-cashier-api_1  |     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
sdj-cashier-api_1  |     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
sdj-cashier-api_1  |     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
sdj-cashier-api_1  |     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
sdj-cashier-api_1  |     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
sdj-cashier-api_1  |     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
sdj-cashier-api_1  |     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
sdj-cashier-api_1  |     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
sdj-cashier-api_1  |     at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
sdj-cashier-api_1  |     at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
sdj-cashier-api_1  |     at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
sdj-cashier-api_1  |     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
sdj-cashier-api_1  |     at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
sdj-cashier-api_1  |     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
sdj-cashier-api_1  |     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
sdj-cashier-api_1  |     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
sdj-cashier-api_1  |     at java.lang.Thread.run(Thread.java:748)
sdj-cashier-api_1  | Caused by: io.lettuce.core.RedisCommandTimeoutException: Command timed out after 500 millisecond(s)
sdj-cashier-api_1  |     at io.lettuce.core.ExceptionFactory.createTimeoutException(ExceptionFactory.java:51)
sdj-cashier-api_1  |     at io.lettuce.core.LettuceFutures.awaitOrCancel(LettuceFutures.java:114)
sdj-cashier-api_1  |     at io.lettuce.core.FutureSyncInvocationHandler.handleInvocation(FutureSyncInvocationHandler.java:69)
sdj-cashier-api_1  |     at io.lettuce.core.internal.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:80)
sdj-cashier-api_1  |     at com.sun.proxy.$Proxy147.get(Unknown Source)
sdj-cashier-api_1  |     at org.springframework.data.redis.connection.lettuce.LettuceStringCommands.get(LettuceStringCommands.java:66)
sdj-cashier-api_1  |     ... 83 common frames omitted
...全文
1208 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38121708 2019-07-26
  • 打赏
  • 举报
回复
最近也碰到这个问题,google半天也没找到解决方案
weixin_38121538 2019-06-20
  • 打赏
  • 举报
回复
之前也遇到过这问题,目前使用2.1.4暂时没发现这个问题了。 一般能使用默认的我还是尽量用默认的,没去深究什么原因。。
weixin_38116036 2019-06-20
  • 打赏
  • 举报
回复
我之前我也碰到了楼主的问题,但是没楼主研究的这么深。我是自己直接替换了redis的驱动,然后就好了。
weixin_38077401 2019-06-20
  • 打赏
  • 举报
回复
换驱动后解决了。由lettuce换到jedis。 spring-data-redis内置了两款驱动,jedis和lettuce。springboot1.X版本默认jedis实现,springboot2.X默认lettuce实现。 lettuce:基于netty实现,线程安全,但默认只有一个实例。 jedis:直连redis服务端,一般配合连接池使用,可以增加物理连接。 其实最终还是没有解决lettuce command time out 的问题,增大time-out超时时间不管200ms还是200000ms也无济于事,lettuce只要断掉连接后,自己并没有去重连的机制,最后导致time out。不知是否与连接实例有关、又或者是lettuce bug? 换驱动的想法来自stackoverflow帖子:https://stackoverflow.com/questions/55629324/spring-boot-stringredistemplate-error-redis-command-timed-out-using-lettuce,因这位也遇到同样的问题。    
weixin_38075050 2019-06-19
  • 打赏
  • 举报
回复
在线等哈

474

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧