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.
Tópicos
Descoberta de cliente do cluster e recuo exponencial (Valkey e Redis OSS)
Configurar um tempo limite do lado do cliente (Valkey e Redis OSS)
Configurar um tempo limite de inatividade do lado do servidor (Valkey e Redis OSS)
Armazenamento de itens compostos grandes (Valkey e Redis OSS)
Configurar um protocolo preferencial para clusters de pilha dupla (Valkey e Redis OSS)
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 ()
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; }));