Alface
Acesse uma instância do DCS Redis por meio do Lettuce em um ECS na mesma VPC. Para obter mais informações sobre como usar outros clientes do Redis, visite o site oficial do Redis.
Pré-requisitos
- Uma instância do DCS Redis foi criada e está no estado Running.
- Foi criado um ECS. Para obter detalhes sobre como criar um ECS, consulte Comprando um ECS .
- Se o ECS executar o SO de Linux, certifique-se de que o ambiente de compilação Java tenha sido instalado no ECS.
Procedimento
- Exiba o endereço IP/nome do domínio e o número da porta da instância do DCS Redis a ser acessada.
Para obter detalhes, consulte Exibindo Detalhes da Instância .
- Acesse o ECS.
- Use o Maven para adicionar a seguinte dependência ao arquivo pom.xml:
<dependency> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> <version>6.1.6.RELEASE</version> </dependency>
- Use Lettuce (um cliente Java) para se conectar à instância do DCS.
- Exemplo de uso do Lettuce para conexão a uma instância de Cluster DCS Redis de nó único, mestre/em espera ou proxy com uma única conexão
// password indicates the connection password. If there is no password, delete "password@". If there is a password and it contains special characters, conversion is required. RedisClient redisClient = RedisClient.create("redis://password@host:port"); StatefulRedisConnection<String, String> connection = redisClient.connect(); RedisCommands<String, String> syncCommands = connection.sync(); syncCommands.set("key", "value"); System.out.println("Connected to Redis:" + syncCommands.get("key")); // Close the connection. connection.close(); // Close the client. redisClient.shutdown();
- Exemplo de uso do Lettuce para conectar-se a uma instância do DCS Redis de cluster de nó único, mestre/em espera ou proxy com pool de conexão
- Adicione a seguinte dependência além da dependência Maven anterior:
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.11.1</version> </dependency>
- O código é o seguinte:
// password indicates the connection password. If there is no password, delete "password@". If there is a password and it contains special characters, conversion is required. RedisClient clusterClient = RedisClient.create("redis://password@host:port"); GenericObjectPoolConfig<StatefulRedisConnection<String, String>> genericObjectPoolConfig = new GenericObjectPoolConfig(); // Connection pool parameters genericObjectPoolConfig.setMaxIdle(3); genericObjectPoolConfig.setMinIdle(2); genericObjectPoolConfig.setMaxTotal(3); genericObjectPoolConfig.setMaxWaitMillis(-1); GenericObjectPool<StatefulRedisConnection<String, String>> pool = ConnectionPoolSupport .createGenericObjectPool(() -> clusterClient.connect(), genericObjectPoolConfig); // Obtain a connection to perform operations. try (StatefulRedisConnection<String, String> con = pool.borrowObject()) { RedisCommands<String, String> sync = con.sync(); sync.set("key", "value"); System.out.println("Connected by pool:" + sync.get("key")); } catch (Exception e) { e.printStackTrace(); }finally { // Close the resources. pool.close(); clusterClient.shutdown(); }
- Adicione a seguinte dependência além da dependência Maven anterior:
- Exemplo de uso do Lettuce para se conectar a uma instância do Cluster do Redis DCS do Redis com uma única conexão (a atualização automatizada da topologia deve estar ativada)
public class SingleConnectionToCluster { public static void main(String[] args) { // Enable automated topology refresh. ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder() // Periodic refresh: every time milliseconds. .enablePeriodicRefresh(Duration.ofMillis(time)) // Triggers of adaptive refresh: MOVED redirection, ASK redirection, reconnection, unknown node (since 5.1), and slot not in any of the current shards (since 5.2). .enableAllAdaptiveRefreshTriggers() .build(); // password indicates the connection password. If there is no password, delete "password@". If there is a password and it contains special characters, conversion is required. RedisClusterClient redisClient = RedisClusterClient.create("redis://password@host:port"); redisClient.setOptions(ClusterClientOptions.builder() .topologyRefreshOptions(topologyRefreshOptions) .build()); StatefulRedisClusterConnection<String, String> connection = redisClient.connect(); // Preferentially read data from the replicas. connection.setReadFrom(ReadFrom.REPLICA_PREFERRED); RedisAdvancedClusterCommands<String, String> syncCommands = connection.sync(); syncCommands.set("key", "value"); System.out.println("Connected to RedisCluster:" + syncCommands.get("key")); // Close the connection. connection.close(); // Close the client. redisClient.shutdown(); } }
- Exemplo de código para conexão ao Cluster do Redis com pool de conexão
- Adicione a seguinte dependência além da dependência Maven anterior:
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.11.1</version> </dependency>
- O código é o seguinte (a atualização automatizada da topologia deve estar ativada):
public class PoolConnectionToCluster { public static void main(String[] args) { // Enable automated topology refresh. ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder() // Periodic refresh every time milliseconds. .enablePeriodicRefresh(Duration.ofMillis(time)) // Triggers of adaptive refresh: MOVED redirection, ASK redirection, reconnection, unknown node (since 5.1), and slot not in any of the current shards (since 5.2). .enableAllAdaptiveRefreshTriggers() .build(); // password indicates the connection password. If there is no password, delete "password@". If there is a password and it contains special characters, conversion is required. RedisClusterClient redisClient = RedisClusterClient.create("redis://password@host:port"); redisClient.setOptions(ClusterClientOptions.builder() .topologyRefreshOptions(topologyRefreshOptions) .build()); GenericObjectPoolConfig<StatefulRedisClusterConnection<String, String>> genericObjectPoolConfig = new GenericObjectPoolConfig(); // Connection pool parameters genericObjectPoolConfig.setMaxIdle(3); genericObjectPoolConfig.setMinIdle(2); genericObjectPoolConfig.setMaxTotal(3); genericObjectPoolConfig.setTimeBetweenEvictionRuns(Duration.ofMillis(2000)); genericObjectPoolConfig.setMaxWait(Duration.ofMillis(5000)); GenericObjectPool<StatefulRedisClusterConnection<String, String>> pool = ConnectionPoolSupport .createGenericObjectPool(() -> redisClient.connect(), genericObjectPoolConfig); // Obtain a connection to perform operations. try (StatefulRedisClusterConnection<String, String> con = pool.borrowObject()) { // Preferentially read data from the replicas. con.setReadFrom(ReadFrom.REPLICA_PREFERRED); RedisAdvancedClusterCommands<String, String> syncCommands = con.sync(); syncCommands.set("key", "value"); System.out.println("Connected to RedisCluster:" + syncCommands.get("key")); } catch (Exception e) { e.printStackTrace(); } finally { // Close the resources. pool.close(); redisClient.shutdown(); } } }
- Adicione a seguinte dependência além da dependência Maven anterior:
host é o endereço IP/nome de domínio da instância do DCS, port é o número da porta da instância do DCS e password é a senha da instância do DCS. Especifique esses parâmetros conforme necessário antes de executar o código. O pool de conexões é recomendado. Ajuste parâmetros como timeout, MaxTotal (número máximo de conexões), MinIdle (número mínimo de conexões ociosas), MaxIdle (número máximo de conexões ociosas) e MaxWait (tempo máximo de espera) com base nos requisitos de serviço.
- Exemplo de uso do Lettuce para conexão a uma instância de Cluster DCS Redis de nó único, mestre/em espera ou proxy com uma única conexão