Contoh: Konfigurasi selada untuk mode cluster, diaktifkan TLS - Amazon ElastiCache

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Contoh: Konfigurasi selada untuk mode cluster, diaktifkan TLS

catatan

Timeout dalam contoh berikut adalah untuk tes yang menjalankanSET/GETperintah dengan kunci dan nilai hingga 20 byte. Waktu pemrosesan bisa lebih lama jika perintahnya kompleks atau kunci dan nilainya lebih besar. Anda harus mengatur waktu habis berdasarkan kasus penggunaan aplikasi Anda.

// 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();