Mejores prácticas para clientes (Valkey y OSS Redis) - Amazon ElastiCache

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Mejores prácticas para clientes (Valkey y OSS Redis)

Conozca las prácticas recomendadas para situaciones comunes y siga los ejemplos de código de algunas de las bibliotecas OSS cliente de Valkey y Redis de código abierto más populares (redis-py y Lettuce)PHPRedis, así como las mejores prácticas para interactuar con los ElastiCache recursos de las bibliotecas cliente de código abierto de Memcached más utilizadas.

Configuración de un protocolo preferido para los clústeres de doble pila (Valkey y Redis) OSS

En el caso de los OSS clústeres Valkey o Redis habilitados para el modo de clúster, puede controlar el protocolo que utilizarán los clientes para conectarse a los nodos del clúster con el parámetro IP Discovery. El parámetro IP Discovery se puede establecer en oIPv4. IPv6

Para los OSS clústeres de Valkey o Redis, el parámetro de detección de IP establece el protocolo IP utilizado en la salida de las ranuras (), los fragmentos de clúster () y los nodos del clúster (). Los clientes utilizan estos comandos para detectar la topología del clúster. Los clientes utilizan estos comandos para conectarse a los demás nodos del clúster. IPs

Cambiar la detección de IP no provocará ningún tiempo de inactividad para los clientes conectados. Sin embargo, los cambios tardarán algún tiempo en propagarse. Para determinar si los cambios se han propagado por completo en un OSS clúster de Valkey o Redis, supervise el resultado de. cluster slots Una vez que todos los nodos devueltos por el comando cluster slots IPs informen sobre el nuevo protocolo, los cambios han terminado de propagarse.

Ejemplo con Redis-Py:

cluster = RedisCluster(host="xxxx", port=6379) target_type = IPv6Address # Or IPv4Address if changing to IPv4 nodes = set() while len(nodes) == 0 or not all((type(ip_address(host)) is target_type) for host in nodes): nodes = set() # This refreshes the cluster topology and will discovery any node updates. # Under the hood it calls cluster slots cluster.nodes_manager.initialize() for node in cluster.get_nodes(): nodes.add(node.host) self.logger.info(nodes) time.sleep(1)

Ejemplo con Lettuce:

RedisClusterClient clusterClient = RedisClusterClient.create(RedisURI.create("xxxx", 6379)); Class targetProtocolType = Inet6Address.class; // Or Inet4Address.class if you're switching to IPv4 Set<String> nodes; do { // Check for any changes in the cluster topology. // Under the hood this calls cluster slots clusterClient.refreshPartitions(); Set<String> nodes = new HashSet<>(); for (RedisClusterNode node : clusterClient.getPartitions().getPartitions()) { nodes.add(node.getUri().getHost()); } Thread.sleep(1000); } while (!nodes.stream().allMatch(node -> { try { return finalTargetProtocolType.isInstance(InetAddress.getByName(node)); } catch (UnknownHostException ignored) {} return false; }));