当前位置: 首页 > 知识库问答 >
问题:

Redis客户端Lettuce命令超时与套接字超时

莫骞仕
2023-03-14

我们已经定义了Lettuce客户端连接工厂,以便能够连接到定义自定义套接字和命令超时的Redis:

@Bean
LettuceConnectionFactory lettuceConnectionFactory() {

   final SocketOptions socketOptions = SocketOptions.builder().connectTimeout(socketTimeout).build();
   final ClientOptions clientOptions =
           ClientOptions.builder().socketOptions(socketOptions).build();

   LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
           .commandTimeout(redisCommandTimeout)
           .clientOptions(clientOptions).build();
   RedisStandaloneConfiguration serverConfig = new RedisStandaloneConfiguration(redisHost,
           redisPort);

   final LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(serverConfig,
           clientConfig);
   lettuceConnectionFactory.setValidateConnection(true);
   return new LettuceConnectionFactory(serverConfig, clientConfig);
}

莴苣文档定义默认值:

  • 默认套接字超时为10秒
  • 默认命令超时为60秒

如果Redis服务中断,应用程序必须在300ms内接收超时。哪个值必须定义为最大值?

Github示例项目:https://github.com/cristianprofile/spring-data-redis-lettuce

共有1个答案

夏侯林
2023-03-14

在套接字选项中,您指定连接超时。这是允许Redis客户端(Lettuce)尝试与Redis服务器建立TCP/IP连接的最长时间。此值应该相对较小(例如最多1分钟)。

如果客户端无法在1分钟内建立与服务器的连接,我想可以肯定地说服务器不可用(服务器关闭、地址/端口错误、防火墙等网络安全禁止连接等)。

命令超时完全不同。建立连接后,客户端可以向服务器发送命令。它希望服务器响应这些命令。超时配置客户端等待服务器命令响应的时间。

我认为可以将此超时设置为更大的值(例如几分钟),以防客户端命令向服务器发送大量数据,并且传输和存储如此多的数据需要时间。

 类似资料:
  • 问题内容: 我在ElastiCache上运行Redis集群。 多个进程连接到Redis集群。每个进程都位于Docker容器中。流程不尽相同-我有一个流程,一个流程等。 正常运行几天后,连接到Redis时,我的某些进程开始超时。当我进入受影响的容器并尝试通过到达群集时,与群集的连接超时。这告诉我,问题不仅影响过程,而且影响整个容器。 当我从任何其他容器中使用时,连接都不会出现问题。 我的进程会根据需

  • 当我尝试使用套接字将物理设备连接到服务器时,我遇到了一个问题。在服务器端,它似乎不接受任何连接,而在客户端,套接字超时。你知道为什么会这样吗? 我在下面提供我的代码 服务器代码: 客户端: 11-16 23:32:11.016:W/系统。错误(24213):java.net。ConnectException:无法连接到/192.168.1.116(端口9090):连接失败:ETIMEDOUT(连接

  • 主要内容:Redis IO多路复用,客户端最大连接数,常用命令,命令应用应用Redis 提供了一些操作客户端(client)的命令,比如查询所有已连接到服务器的客户端数量,控制客户端的连接状态(关闭或者挂起)等。通过客户命令我们可以轻松的实现对客户端的管理、控制。 Redis 服务器通过监听 TCP 端口的方式来接受客户端的连接。当一个连接建立后,Redis 会自动执行以下过程: 首先客户端 socket 被设置为非阻塞模式,这是因为 Redis 在网络事件处理上采用了非

  • 错误:在object.exports._errnoException(util.js:856:11)在exports._exceptionWithHostPort(util.js:879:20)在tcpConnectTRap.AfterConnect[as oncomplete](net.js:1063:14)vivek@vivek-latitude-e6220://var/www/html/te

  • 所以我的问题是:什么是“客户端登录超时”,什么是一个好的默认设置?对我来说,一个完美的答案是在工作流失败时从用户的角度描述工作流(比如用户在点击电子邮件验证链接之前喝了一分钟咖啡)和/或进一步阅读的链接

  • 在过去,我使用Apache的http客户端。我有以下设置: 连接请求超时 连接超时 读取/套接字超时 连接池大小 null