Melhores práticas para clientes (Valkey e RedisOSS) - Amazon ElastiCache

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Melhores práticas para clientes (Valkey e RedisOSS)

Conheça as melhores práticas para cenários comuns e acompanhe exemplos de código de algumas das bibliotecas OSS cliente Valkey e Redis de código aberto mais populares (redis-py e Lettuce)PHPRedis, bem como as melhores práticas para interagir com ElastiCache recursos com bibliotecas cliente de código aberto do Memcached comumente usadas.

Configurando um protocolo preferencial para clusters de pilha dupla (Valkey e Redis) OSS

Para OSS clusters Valkey ou Redis habilitados para o modo de cluster, você pode controlar o protocolo que os clientes usarão para se conectar aos nós no cluster com o parâmetro IP Discovery. O parâmetro IP Discovery pode ser definido como IPv4 ouIPv6.

Para OSS clusters Valkey ou Redis, o parâmetro de descoberta de IP define o protocolo IP usado na saída de slots (), fragmentos de cluster () e nós de cluster (). Esses comandos são usados pelos clientes para descobrir a topologia do cluster. Os clientes usam os comandos IPs in theses para se conectar aos outros nós no cluster.

Alterar a descoberta de IP não resultará em nenhum tempo de inatividade para os clientes conectados. No entanto, as alterações levarão algum tempo para se propagar. Para determinar quando as alterações foram completamente propagadas para um OSS cluster Valkey ou Redis, monitore a saída de. cluster slots Depois que todos os nós retornados pelo comando cluster slots se reportam IPs com o novo protocolo, as alterações terminam de se propagar.

Exemplo com 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)

Exemplo com 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; }));