请教一个 redis 长时间不使用再使用会报 command timeout 错误的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nekoneko
8.54D
V2EX    Redis

请教一个 redis 长时间不使用再使用会报 command timeout 错误的问题

  •  1
     
  •   nekoneko 2020-07-28 15:33:29 +08:00 12018 次点击
    这是一个创建于 1900 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 环境是 springboot2.0,连接池是 springboot 带的 lettuce
    • 配置使用的是默认配置
    • 现象就是 一段时间不是用 redis, 再去使用的时候就会报 command timeout exception

    下面是报错信息

    Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException: Command timed out at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:70) at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:44) at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:42) at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:257) at org.springframework.data.redis.connection.lettuce.LettuceKeyCommands.convertLettuceAccessException(LettuceKeyCommands.java:650) at org.springframework.data.redis.connection.lettuce.LettuceKeyCommands.keys(LettuceKeyCommands.java:148) at org.springframework.data.redis.connection.DefaultedRedisConnection.keys(DefaultedRedisConnection.java:75) at org.springframework.data.redis.core.RedisTemplate.lambda$keys$10(RedisTemplate.java:840) at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:224) at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:184) at org.springframework.data.redis.core.RedisTemplate.keys(RedisTemplate.java:840) 

    早网上找了找没找到什么有用的解决方案,特来请教

    14 条回复    2020-08-18 09:33:19 +08:00
    ShutTheFu2kUP
        1
    ShutTheFu2kUP  
       2020-07-28 15:47:59 +08:00
    mark 一下,也有同样问题
    purensong
        2
    purensong  
       2020-07-28 15:49:19 +08:00
    好像是 lettuce 的 bug,换驱动吧,jedis 不香吗
    securityCoding
        3
    securityCoding  
       2020-07-28 16:53:10 +08:00
    跟源码, 发现问题->解决问题 , 水平就是这样提高的
    kidtest
        4
    kidtest  
       2020-07-28 16:59:34 +08:00   2
    一般这种都是 redis server 中配置了连接的超时时间,如果一个 client 连接在这段时间内没有操作就会被断开。所以首先需要确定 server 的超时时间,这个可以在配置文件中看到,然后一般的 redis 连接池都可以配置客户端的超时时间,将这个超时间配的短于 server 的超时时间即可。
    或者笨方法就是自己手动加个判断,如果上次命令执行时间超过了超时时间,自己再创建一个新连接去执行命令
    killergun
        5
    killergun  
       2020-07-28 17:03:34 +08:00
    应该是连接断开了,客户端没用重新连接,而是用旧的连接
    xuanbg
        6
    xuanbg  
       2020-07-28 17:30:52 +08:00
    连接被 redis 断开了,客户端还在使用原先的连接就这样了。我遇到过的情况是 windows 平台的微软 redis 服务会断开客户端,Linux 上的 docker 装的 redis 就不会。
    blueorange
        7
    blueorange  
       2020-07-28 18:06:41 +08:00
    顶一下 , 同样问题
    nekoneko
        8
    nekoneko  
    OP
       2020-07-28 22:14:00 +08:00
    @kidtest #4
    @killergun #5
    @xuanbg #6

    redis 的配置
    # Close the connection after a client is idle for N seconds (0 to disable)
    timeout 0
    说明服务端不会去主动断开空闲连接,那么就是 lettuce 的锅了
    在 github 上作者说 4.x 的版本会有这个问题,但是 springboot 用的是 5.x 的

    又进行了几次复现,一段时间不用,再调用是会出现 command timeout,如果继续调用会一直出现这个异常,
    又过了一段时间,调用,成功.....
    kidtest
        9
    kidtest  
       2020-07-29 10:54:38 +08:00
    @nekoneko

    那这就有点奇怪了。。应该是库哪里有问题。。
    wakzz
        10
    wakzz  
       2020-07-29 14:51:52 +08:00
    开启客户端心跳包吧
    nekoneko
        11
    nekoneko  
    OP
       2020-07-30 16:44:13 +08:00
    @wakzz #10 lettuce 没有配置心跳的地方,我只能自己写个定时任务,每分钟 get 一次
    ljw930824
        12
    ljw930824  
       2020-08-17 14:09:04 +08:00
    lettuce 超时问题有俩种解决办法
    1 、Redis 服务端 通过 tcp-keepalive 发送 ack 达到超活检测效果 官方建议设置 60s 时间
    2 、升级 lettuce-core 至 5.3.0+
    (具体看此 Fix infinite command timeout #1260 https://github.com/lettuce-io/lettuce-core/issues/1260
    ljw930824
        13
    ljw930824  
       2020-08-17 14:19:53 +08:00
    @nekoneko 抱歉,实际 这个更贴近 lettuce 中描述的 Bug 被 Block https://github.com/lettuce-io/lettuce-core/issues/1269
    nekoneko
        14
    nekoneko  
    OP
       2020-08-18 09:33:19 +08:00
    @ljw930824 #12 好吧,现在用的是 5.1.3 的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3605 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 39.8.5 41ms UTC 00:47 PVG 08:47 LAX 17:47 JFK 20:47
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86