Beispiel: Lettuve-Konfiguration für den Clustermodus, aktiviert TLS - Amazon ElastiCache

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Beispiel: Lettuve-Konfiguration für den Clustermodus, aktiviert TLS

Anmerkung

Timeouts im folgenden Beispiel beziehen sich auf Tests, bei denen SET GET /-Befehle mit Schlüsseln und Werten von bis zu 20 Byte Länge ausgeführt wurden. Die Verarbeitungszeit kann bei komplexen Befehlen oder größeren Schlüsseln und Werten länger sein. Sie sollten die Timeouts je nach Anwendungsfall Ihrer Anwendung festlegen.

// Set DNS cache TTL public void setJVMProperties() { java.security.Security.setProperty("networkaddress.cache.ttl", "10"); } private static final Duration META_COMMAND_TIMEOUT = Duration.ofMillis(1000); private static final Duration DEFAULT_COMMAND_TIMEOUT = Duration.ofMillis(250); // Socket connect timeout should be lower than command timeout for Lettuce private static final Duration CONNECT_TIMEOUT = Duration.ofMillis(100); // Create RedisURI from the cluster configuration endpoint clusterConfigurationEndpoint = <cluster-configuration-endpoint> // TODO: add your cluster configuration endpoint final RedisURI redisUriCluster = RedisURI.Builder.redis(clusterConfigurationEndpoint) .withPort(6379) .withSsl(true) .build(); // Configure the client's resources ClientResources clientResources = DefaultClientResources.builder() .reconnectDelay( Delay.fullJitter( Duration.ofMillis(100), // minimum 100 millisecond delay Duration.ofSeconds(10), // maximum 10 second delay 100, TimeUnit.MILLISECONDS)) // 100 millisecond base .dnsResolver(new DirContextDnsResolver()) .build(); // Create a cluster client instance with the URI and resources RedisClusterClient redisClusterClient = RedisClusterClient.create(clientResources, redisUriCluster); // Use a dynamic timeout for commands, to avoid timeouts during // cluster management and slow operations. class DynamicClusterTimeout extends TimeoutSource { private static final Set<ProtocolKeyword> META_COMMAND_TYPES = ImmutableSet.<ProtocolKeyword>builder() .add(CommandType.FLUSHDB) .add(CommandType.FLUSHALL) .add(CommandType.CLUSTER) .add(CommandType.INFO) .add(CommandType.KEYS) .build(); private final Duration metaCommandTimeout; private final Duration defaultCommandTimeout; DynamicClusterTimeout(Duration defaultTimeout, Duration metaTimeout) { defaultCommandTimeout = defaultTimeout; metaCommandTimeout = metaTimeout; } @Override public long getTimeout(RedisCommand<?, ?, ?> command) { if (META_COMMAND_TYPES.contains(command.getType())) { return metaCommandTimeout.toMillis(); } return defaultCommandTimeout.toMillis(); } } TimeoutOptions timeoutOptions = TimeoutOptions.builder() .timeoutSource(new DynamicClusterTimeout(DEFAULT_COMMAND_TIMEOUT, META_COMMAND_TIMEOUT)) .build(); // Configure the topology refreshment optionts final ClusterTopologyRefreshOptions topologyOptions = ClusterTopologyRefreshOptions.builder() .enableAllAdaptiveRefreshTriggers() .enablePeriodicRefresh() .dynamicRefreshSources(true) .build(); // Configure the socket options final SocketOptions socketOptions = SocketOptions.builder() .connectTimeout(CONNECT_TIMEOUT) .keepAlive(true) .build(); // Configure the client's options final ClusterClientOptions clusterClientOptions = ClusterClientOptions.builder() .topologyRefreshOptions(topologyOptions) .socketOptions(socketOptions) .autoReconnect(true) .timeoutOptions(timeoutOptions) .nodeFilter(it -> ! (it.is(RedisClusterNode.NodeFlag.FAIL) || it.is(RedisClusterNode.NodeFlag.EVENTUAL_FAIL) || it.is(RedisClusterNode.NodeFlag.NOADDR))) .validateClusterNodeMembership(false) .build(); redisClusterClient.setOptions(clusterClientOptions); // Get a connection final StatefulRedisClusterConnection<String, String> connection = redisClusterClient.connect(); // Get cluster sync/async commands RedisAdvancedClusterCommands<String, String> sync = connection.sync(); RedisAdvancedClusterAsyncCommands<String, String> async = connection.async();