Práticas recomendadas para clientes (Valkey e Redis OSS) - 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á.

Práticas recomendadas para clientes (Valkey e Redis OSS)

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

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

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

Para clusters do Valkey ou Redis OSS, o parâmetro de descoberta de IP define o protocolo IP usado na saída de cluster slots (), cluster shards () e cluster nodes (). 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 cluster do Valkey ou Redis OSS, 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; }));