Contoh: Konfigurasi selada untuk mode klaster dan TLS diaktifkan - Amazon ElastiCache untuk Redis

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 klaster dan TLS diaktifkan

catatan

Timeout dalam contoh berikut adalah untuk tes yang menjalankan SET/GET perintah dengan kunci dan nilai-nilai hingga 20 byte panjang. Waktu pemrosesan bisa lebih lama ketika perintah kompleks atau kunci dan nilainya lebih besar. Anda harus mengatur batas waktu 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();