Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2024-07-29 GMT+08:00

Lettuce

Acceda a una instancia de DCS Redis a través de Lettuce en un ECS en la misma VPC. Para obtener más información sobre cómo usar otros clientes de Redis, visite el sitio web oficial de Redis.

Prerrequisitos:

  • Se ha creado una instancia de DCS Redis y se encuentra en el estado Running.
  • Se ha creado un ECS. Para obtener más información sobre cómo crear un ECS, consulte Compra de ECS.
  • Si el ECS ejecuta el SO de Linux, asegúrese de que el entorno de compilación de Java se ha instalado en el ECS.

Procedimiento

  1. Vea la dirección IP/nombre de dominio y el número de puerto de la instancia de DCS Redis a la que se debe acceder.

    Para obtener más información, consulte Consulta de detalles de instancia.

  2. Inicie sesión en el ECS.
  3. Utilice Maven para agregar la siguiente dependencia al archivo pom.xml:

    <dependency>
      <groupId>io.lettuce</groupId>
      <artifactId>lettuce-core</artifactId>
      <version>6.1.6.RELEASE</version>
    </dependency>

  4. Utilice Lettuce (un cliente de Java) para conectarse a la instancia DCS.

    • Ejemplo de uso de Lettuce para conectarse a una instancia de DCS Redis de nodo único, principal/en standby o de Clúster Proxy con una sola conexión
      // 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();
    • Ejemplo de uso de Lettuce para conectarse a una instancia de DCS Redis de nodo único, principal/en standby o de Clúster Proxy con agrupación de conexiones
      1. Agregue la siguiente dependencia además de la anterior dependencia Maven:
        <dependency>  
           <groupId>org.apache.commons</groupId>  
           <artifactId>commons-pool2</artifactId>
            <version>2.11.1</version>  
         </dependency> 
      2. El código es el siguiente:
        // 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();
        }
    • Ejemplo de uso de Lettuce para conectarse a una instancia de Clúster Redis de DCS para Redis con una sola conexión (se debe habilitar la actualización automática de la topología)
      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();  
          }  
      }  
    • Ejemplo de código para conectar al Clúster Redis con pooling de conexiones
      1. Agregue la siguiente dependencia además de la anterior dependencia Maven:
        <dependency>  
           <groupId>org.apache.commons</groupId>  
           <artifactId>commons-pool2</artifactId>
            <version>2.11.1</version>  
         </dependency>  
      2. El código es el siguiente (se debe habilitar la actualización automática de la topología):
        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 es la dirección IP/nombre de dominio de la instancia DCS, port es el número de puerto de la instancia DCS y password es la contraseña de la instancia DCS. Especifique estos parámetros según sea necesario antes de ejecutar el código. Se recomienda la agrupación de conexiones. Ajuste parámetros como timeout, MaxTotal (número máximo de conexiones), MinIdle (número mínimo de conexiones inactivas), MaxIdle (número máximo de conexiones inactivas) y MaxWait (tiempo máximo de espera) según los requisitos de servicio.