首页 > 解决方案 > Lettuce Redis 客户端:SocketOptions 中的 connectTimeout 和 RedisClusterClient 中的 defaultTimeout 的区别

问题描述

我的应用程序使用 Lettuce Redis 客户端连接到 AWS Elasticache。我正在尝试遵循本指南来提高我的服务弹性。建议的要点之一是关于套接字超时:

确保客户端的套接字超时设置为至少一秒(相对于几个客户端中典型的“无”默认值)。当服务器负载很高时,将超时设置得太低可能会导致大量超时。将其设置得太高可能会导致您的应用程序需要很长时间才能检测到连接问题。

我如何创建连接的伪代码是:

RedisClusterClient redisClusterClient = RedisClusterClient.create(clientResources, redisUrl);
            // Topology refresh and periodic refresh
            ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
                .enablePeriodicRefresh(true)
                .enableAllAdaptiveRefreshTriggers()
                .build();

            // Update cluster topology periodically
            redisClient.setOptions(ClusterClientOptions.builder()
                .topologyRefreshOptions(topologyRefreshOptions)
                .build());

StatefulRedisClusterConnection connection = redisClusterClient.connect(new ByteArrayCodec());

我正在浏览生菜文档,发现有两个可用的超时选项:

如果有人可以帮助我了解两者之间的区别以及哪一个更适合我的用例,我将不胜感激。

编辑:这是我到目前为止所尝试的:

我尝试一次使用两者SocketOptionsdeafultTimeout()一个并进行了一些测试。

这是我所做的: 测试用例 1

测试用例 2

观察(对于两个 TC):

我在这里缺少一些配置吗?

标签: javaredisamazon-elasticachelettuce

解决方案


推荐阅读