• io.lettuce.core.RedisCommandTimeoutException: Command timed out 解决办法


    Springboot 集成 redis 项目,

    引入包: 默认为 lettuce 客户端连接

    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-data-redisartifactId>
    4. dependency>

    报错信息如下:

    1. org.springframework.dao.QueryTimeoutException: Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException: Command timed out
    2. at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:70) ~[spring-data-redis-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    3. at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41) ~[spring-data-redis-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    4. at org.springframework.data.redis.PassThroughExceptionTranslationStrategy.translate(PassThroughExceptionTranslationStrategy.java:44) ~[spring-data-redis-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    5. at org.springframework.data.redis.FallbackExceptionTranslationStrategy.translate(FallbackExceptionTranslationStrategy.java:42) ~[spring-data-redis-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    6. at org.springframework.data.redis.connection.lettuce.LettuceConnection.convertLettuceAccessException(LettuceConnection.java:257) ~[spring-data-redis-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    7. at org.springframework.data.redis.connection.lettuce.LettuceConnection.pSubscribe(LettuceConnection.java:747) ~[spring-data-redis-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    8. at org.springframework.data.redis.listener.RedisMessageListenerContainer$SubscriptionTask.eventuallyPerformSubscription(RedisMessageListenerContainer.java:783) ~[spring-data-redis-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    9. at org.springframework.data.redis.listener.RedisMessageListenerContainer$SubscriptionTask.run(RedisMessageListenerContainer.java:750) ~[spring-data-redis-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    10. at java.lang.Thread.run(Thread.java:748) [na:1.8.0_151]
    11. Caused by: io.lettuce.core.RedisCommandTimeoutException: Command timed out
    12. at io.lettuce.core.LettuceFutures.awaitOrCancel(LettuceFutures.java:114) ~[lettuce-core-5.0.2.RELEASE.jar:na]
    13. at io.lettuce.core.FutureSyncInvocationHandler.handleInvocation(FutureSyncInvocationHandler.java:62) ~[lettuce-core-5.0.2.RELEASE.jar:na]
    14. at io.lettuce.core.internal.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:80) ~[lettuce-core-5.0.2.RELEASE.jar:na]
    15. at com.sun.proxy.$Proxy70.psubscribe(Unknown Source) ~[na:na]
    16. at org.springframework.data.redis.connection.lettuce.LettuceSubscription.doPsubscribe(LettuceSubscription.java:54) ~[spring-data-redis-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    17. at org.springframework.data.redis.connection.util.AbstractSubscription.pSubscribe(AbstractSubscription.java:130) ~[spring-data-redis-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    18. at org.springframework.data.redis.connection.lettuce.LettuceConnection.pSubscribe(LettuceConnection.java:745) ~[spring-data-redis-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    19. ... 3 common frames omitted

    解决方法:

    1.  修改redis超时时间,配置文件中修改配置

    2. 添加redis连接池

    整体配置如下:

    spring:
      redis:
        # Redis服务器地址
        host:  127.0.0.1
        # Redis服务器连接端口
        port: 6379
         # Redis服务器连接密码
        password: 
        # Redis数据库索引
        database: 3
        pool:
        # 连接池最大连接数(使用负值表示没有限制)
          max-active: 10
        # 连接池最大阻塞等待时间(使用负值表示没有限制)
          max-wait: 1
        # 连接池中的最大空闲连接
          max-idle: 10
        # 连接池中的最小空闲连接
          min-idle: 1
        # 连接超时时间(毫秒)
        timeout: 30000
        lettuce:
          pool:
            max-active: 50
            max-wait: -1
            max-idle: 50
            min-idle: 1
    但是采用上面的配置添加了连接池,会发现项目启动失败,报错信息也没有。缺少了一个 commons-pool2 连接池的包,加上即可,整体包如下:

    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-data-redisartifactId>
    4. dependency>
    5. <dependency>
    6. <groupId>org.apache.commonsgroupId>
    7. <artifactId>commons-pool2artifactId>
    8. dependency>


     

  • 相关阅读:
    跟运维学 Linux - 02
    线程方法join/join(timeout)源码分析
    [干货]LangChain入门-LangChain框架的构成与特点
    关于多线程同步的一切:乱序执行和内存屏障
    arthas线上问题检查思路
    PostgreSQL 基础知识
    【附源码】计算机毕业设计SSM食品溯源信息查询系统
    腾讯云镜像TencentOS Server操作系统介绍、性能稳定性测评
    electron录制工具-系统托盘
    [青少年CTF训练平台]web部分题解(已完结!)
  • 原文地址:https://blog.csdn.net/xiaowei20091124/article/details/126561139