Redis 客户端 Lettuce 命令超时与套接字超时
Redis client Lettuce command timeout versus socket timeout
我们已经定义了 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);
}
Lettuce 文档定义默认值:
- 默认套接字超时为 10 秒
- 默认命令超时为 60 秒
如果 Redis 服务关闭,应用程序必须在 300 毫秒内收到超时。哪个值必须定义为最大值?
Github 示例项目:
https://github.com/cristianprofile/spring-data-redis-lettuce
在套接字选项中指定连接超时。这是允许 Redis 客户端 (Lettuce) 尝试与 Redis 服务器建立 TCP/IP 连接的最长时间。该值应该相对较小(例如最多 1 分钟)。
如果客户端无法在 1 分钟内与服务器建立连接,我想可以肯定地说服务器不可用(服务器已关闭,address/port 错误,防火墙等网络安全禁止连接等)。
命令超时完全不同。建立连接后,客户端可以向服务器发送命令。它期望服务器响应这些命令。超时配置客户端等待服务器命令响应的时间。
我觉得这个超时时间可以设置大点(比如几分钟),以防客户端命令向服务器发送大量数据,传输和存储这么多数据需要时间。
我们已经定义了 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);
}
Lettuce 文档定义默认值:
- 默认套接字超时为 10 秒
- 默认命令超时为 60 秒
如果 Redis 服务关闭,应用程序必须在 300 毫秒内收到超时。哪个值必须定义为最大值?
Github 示例项目: https://github.com/cristianprofile/spring-data-redis-lettuce
在套接字选项中指定连接超时。这是允许 Redis 客户端 (Lettuce) 尝试与 Redis 服务器建立 TCP/IP 连接的最长时间。该值应该相对较小(例如最多 1 分钟)。
如果客户端无法在 1 分钟内与服务器建立连接,我想可以肯定地说服务器不可用(服务器已关闭,address/port 错误,防火墙等网络安全禁止连接等)。
命令超时完全不同。建立连接后,客户端可以向服务器发送命令。它期望服务器响应这些命令。超时配置客户端等待服务器命令响应的时间。
我觉得这个超时时间可以设置大点(比如几分钟),以防客户端命令向服务器发送大量数据,传输和存储这么多数据需要时间。