Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2022-11-08 GMT+08:00

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

  1. 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 .

  2. Acesse o ECS.
  3. 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>

  4. 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
      1. 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> 
      2. 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();
        }
    • 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
      1. 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>  
      2. 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();  
                }  
            }  
        } 

    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.