Todos os produtos
Search
Central de documentação

Tair (Redis® OSS-Compatible):Erros comuns

Última atualização: Aug 20, 2026

Lista os erros e as soluções mais frequentes para o Tair (compatível com Redis).

Visão geral dos erros

Categoria

Item de erro

Exceções gerais do Redis

redis-cli

Exceções gerais do modo proxy

Scripts Lua e transações

Cliente Jedis

Cliente Lettuce

Cliente Redisson

Cliente Spring Data Redis

Cliente StackExchange.Redis

Cliente Predis

Cliente phpredis

Cliente Go-redis

Cliente node-redis

Exceções gerais do Redis

ERR illegal address

Causa possível: O endereço IP do cliente não está na lista de permissões da instância Tair.

Solução: Adicione o endereço IP do cliente à lista de permissões da instância Tair. Para obter mais informações, consulte Perform diagnostics on connections.

ERR Sentinel compatibility mode is disabled

Causa possível: O modo compatível com Sentinel não está ativado na instância Tair.

Solução: Ative o modo compatível com Sentinel para a instância no console. Para obter mais informações, consulte Enable the Sentinel-compatible mode.

ERR max number of clients reached

Causa possível: A instância Tair atingiu o número máximo de conexões.

Solução:

  • Verifique se há vazamentos de conexão no cliente. Por exemplo, confirme se a função close é chamada após o uso do JedisPool no cliente Jedis.

  • Confirme se a sessão de conexão atual funciona conforme o esperado. Para obter mais informações, consulte Manage instance sessions. Encerre a sessão ou upgrade the instance configurations para aumentar o limite de conexões da instância.

NOAUTH

Causa possível: A autenticação por senha está configurada na instância Tair, mas o cliente não forneceu senha ou forneceu uma senha incorreta.

Solução: Use o nome de usuário e a senha corretos. Logon methods for instances.

Nota

Se você usar versões do cliente Lettuce entre 6.4.0.RELEASE e 6.4.1.RELEASE, esse erro poderá ocorrer mesmo com a senha correta. Esse problema surgiu quando o Lettuce adicionou suporte ao CLIENT SETINFO e foi corrigido na versão 6.4.2.RELEASE. redis/lettuce#3035.

Caso enfrente esse problema, manually switch the protocol to RESP2 ou atualize o cliente para o Lettuce 6.4.2.RELEASE ou posterior. Se utilizar o cliente Spring Data Redis, atualize para o Spring Data Redis 3.4.2 ou posterior.

WRONGPASS invalid username-password pair

Causa possível: A senha é inválida.

Solução: Utilize o nome de usuário e a senha corretos da conta para conectar-se à instância. Para obter mais informações, consulte Connect to an instance.

Nota

Se o modo compatível com Sentinel estiver ativado para a instância, consulte o tópico Use the Sentinel-compatible mode to connect to an instance.

ERR invalid password

Causa possível: A senha é inválida.

Solução: Utilize o nome de usuário e a senha corretos da conta para conectar-se à instância. Para obter mais informações, consulte Connect to an instance.

Nota

Se esse erro for relatado no Data Management (DMS), a causa provável é que a senha salva pelo DMS durante o último login não corresponde à senha atual da instância. Na instance list do DMS, localize a instância e escolha More > Edit na coluna Actions. Em seguida, insira a nova senha no campo Database Password e tente novamente.

Connection reset by peer

Causa possível: Uma exceção no buffer do cliente fechou a conexão.

Solução: Verifique o código da aplicação ou ajuste o tamanho do buffer do cliente. Consulte a seção Unexpected end of stream.

UnknownHostException

Alternativamente, ocorre o erro failed to connect: xxx.redis.rds.aliyuncs.com could not be resolved.

Causa possível: O cliente não consegue resolver o nome de domínio da instância Tair.

Solução: Configure o servidor DNS corretamente. Para obter mais informações, consulte Como solucionar problemas de conexão causados por falha na resolução de DNS?

OOM: Used memory > 'maxmemory'

Causa possível: A instância Tair atingiu a memória máxima configurada.

Nota

Se a instância Tair utilizar a arquitetura cluster, o uso de memória de um shard de dados pode exceder a memória máxima configurada para esse shard.

Solução:

WRONGTYPE: Wrong data type

Causa possível: O comando não corresponde ao tipo de dados da chave, como executar um comando HASH em uma chave String.

Solução: Corrija o código ou o comando incorreto. Comandos do Redis.

ERR unknown command 'xxx'

Causa possível: A instância não oferece suporte a este comando.

O erro ERR unknown command 'WAIT' indica que o comando WAIT não tem suporte no modo proxy para arquitetura cluster. Utilize o modo de link direto.

Solução: Verifique o suporte a comandos para a versão da sua instância. Tair (Enterprise Edition) command support and limits, Command support and limits for Redis Open-Source Edition e Command limits for instances that use cluster architecture or read/write splitting.

Nota

Atualize para a versão secundária mais recente para obter novos recursos e maior estabilidade. Upgrade the minor version and proxy version.

Command 'xxx' not supported

Causa possível: Comandos específicos do Tair estão desativados no Alibaba Cloud ou foram especificados por #no_loose_disabled-commands. Para obter mais informações, consulte Commands supported by Redis Open-Source Edition e Disable high-risk commands.

Solução: Remova o comando desejado da lista de comandos desativados especificada por #no_loose_disabled-commands.

NOPERM this user has no permissions to run the 'xxx'

Causa possível: Comandos específicos do Tair estão desativados no Alibaba Cloud ou foram especificados por #no_loose_disabled-commands. Para obter mais informações, consulte Commands supported by Redis Open-Source Edition e Disable high-risk commands.

Solução: Remova o comando desejado da lista de comandos desativados especificada por #no_loose_disabled-commands.

ERR FLUSHDB is not allowed in migrating mode

Causa possível: Durante a alteração do número de shards de dados em uma instância de cluster cloud-native do Tair, os comandos FLUSHDB e FLUSHALL ficam desativados.

Solução: Aguarde a conclusão da alteração na instância de cluster cloud-native do Tair. Para obter mais informações, consulte Adjust the number of shards for an instance.

CROSSSLOT: Keys not in the same slot

Causa possível: Instâncias de cluster Tair no modo de conexão direta não oferecem suporte a comandos que envolvem múltiplas chaves em slots diferentes, como DEL, MSET e MGET.

Solução:

  • Antes de executar um comando que envolva múltiplas chaves, utilize o comando CLUSTER KEYSLOT para garantir que todas as chaves residam no mesmo slot.

  • Altere os nomes das chaves e implemente hash tags para assegurar que as chaves envolvidas sejam alocadas no mesmo slot. No entanto, evite distorção de dados ao usar hash tags.

  • Altere a instância para uma instância de cluster no modo proxy que ofereça suporte a comandos envolvendo múltiplas chaves em slots diferentes, como DEL, MGET e MSET. Para obter mais informações, consulte Features of proxy nodes.

Erro de instância somente leitura

Causa possível: Durante um failover mestre-réplica, alteração de configuração ou atualização de versão secundária da instância Tair, ocorrem conexões transitórias e a instância permanece como somente leitura por até 30 segundos.

Solução: Aguarde a recuperação da instância. Nenhuma operação manual é necessária. Projete mecanismos de reconexão e tratamento de exceções para sua aplicação. Para obter mais informações, consulte Change the configurations of an instance.

Failed to connect to any host resolved for DNS name

Causa possível: Configuração incorreta da lista de permissões.

Solução: Adicione o endereço IP do cliente à lista de permissões. Configure an IP Whitelist.

Nota

Se você se conectar pela rede pública, adicione seu endereço IP de saída à lista de permissões. Encontre seu IP de saída em https://cip.cc/.

Exceções do redis-cli

Connection reset by peer

Causa possível: A instância de arquitetura padrão tem TLS/SSL ativado, mas a conexão ocorreu sem certificado.

Solução:

ERR must use ssl connection in ssl port

Causa possível: A instância de arquitetura cluster tem TLS/SSL ativado, mas a conexão ocorreu sem certificado.

Solução:

Exceções gerais do proxy

ERR client IP is not in whitelist

Causa possível: O endereço IP do cliente não está na lista de permissões da instância Tair.

Solução: Adicione o endereço IP do cliente à lista de permissões da instância Tair. Para obter mais informações, consulte Perform diagnostics on connections.

NOWRITE: Cannot write to a read-only instance

Alternativamente, ocorre o erro NOREAD You can't read against a non-read redis.

Causa possível: A instância possui pagamentos atrasados ou expirou e está no estado Locked.

Solução: Adicione fundos à sua conta ou renove a instância. Para obter mais informações, consulte Expiration and overdue payments.

ERR syntax error

Causa possível: Sintaxe de comando incorreta, como passar três parâmetros quando quatro são necessários.

Solução: Verifique a sintaxe do comando. Comandos do Redis.

ERR no such db node

Causa possível: Ao executar um comando interno do Tair, o parâmetro db node especificado é inválido.

Solução: Especifique o parâmetro db node corretamente. O valor de db node deve ser menor que o número de shards de dados na instância. Para obter mais informações, consulte In-house commands for instances in proxy mode.

ERR 'xxx' command keys must in same slot

Causa possível: Uma transação ou script acessa chaves de slots diferentes em uma instância de cluster Tair.

Solução: Modifique a transação ou o script. Utilize o comando CLUSTER KEYSLOT para consultar o slot onde uma chave solicitada está armazenada.

Importante

As instâncias de cluster Tair usam o algoritmo Cyclic Redundancy Check (CRC) para distribuir uniformemente as chaves entre diferentes slots. Para armazenar chaves no mesmo slot, utilize hash tags. No entanto, isso pode causar distorção de dados. Proceda com cautela.

EVAL/EVALSHA: Key count must be positive

Causa possível: Nenhuma chave foi especificada ou o parâmetro numkeys foi definido com um valor menor ou igual a 0 para os comandos EVAL e EVALSHA.

Solução: Ao usar os comandos EVAL e EVALSHA, especifique pelo menos uma chave e defina o parâmetro numkeys com um valor maior que 0. Para obter mais informações, consulte Usage of Lua scripts.

Too many pending requests

Causa possível: Solicitações pendentes se acumularam no backend do Tair porque o cliente utiliza um pipeline inválido.

Solução: Reduza o número de solicitações em pipeline.

ERR redis temporary failure

Causa possível: Ao conectar-se a um nó da instância Tair, ocorre um erro de tempo limite devido a instabilidade na rede, excesso de conexões, failover mestre-réplica ou consulta lenta em andamento.

Solução: Aguarde a recuperação da instância. Nenhuma operação manual é necessária. Projete mecanismos de reconexão e tratamento de exceções para sua aplicação.

ERR redis temporary failure (ErrorCode 7002)

Causa possível: Ao conectar-se a um nó da instância Tair, ocorre um erro de tempo limite devido a uma alteração de configuração da instância ou failover mestre-réplica em andamento.

Solução: Aguarde a recuperação da instância. Nenhuma operação manual é necessária. Projete mecanismos de reconexão e tratamento de exceções para sua aplicação.

Scripts Lua e transações

NOSCRIPT: No matching script

Causa possível: Ao executar o comando EVALSHA, o script correspondente ao valor SHA1 não está em cache na instância Tair.

Solução: Execute o comando EVAL ou SCRIPT LOAD para colocar o script necessário em cache na instância Tair e tente novamente. Para obter mais informações, consulte Handle the NOSCRIPT error.

BUSY Redis is busy running a script. You can only call SCRIPT KILL or SHUTDOWN NOSAVE.

Causa possível: Um script Lua atingiu o tempo limite.

Solução: Execute o comando SCRIPT KILL para encerrar a execução do script ou aguarde até que a execução termine. Para obter mais informações, consulte Handle timeouts of Lua scripts.

EVAL command not supported

Causa possível: Não é possível executar comandos relacionados ao EVAL.

Solução: Atualize sua instância para a versão secundária mais recente. Para obter mais informações, consulte Update the minor version of an instance.

Keys for eval/evalsha must be in same slot

Causa possível: As chaves envolvidas no script Lua não residem no mesmo slot. Esse erro é comum em instâncias de cluster.

Solução: Modifique o script Lua. Consulte o slot onde uma chave reside executando o comando CLUSTER KEYSLOT. Para obter mais informações, consulte Limits on Lua scripts in cluster instances.

ERR bad Lua script for Redis cluster

Causa possível: Limitações dos nós de proxy em scripts Lua podem causar este erro.

Solução: Especifique todas as chaves em arrays. Exemplo: EVAL "return redis.call('mget', KEYS[1], KEYS[2])" 2 foo {foo}bar. Variáveis Lua não podem substituir chaves. Para obter mais informações, consulte Limits on Lua scripts in cluster instances.

EXECABORT: Transaction discarded

Causa possível: O comando executado em uma transação contém erros de sintaxe ou falhas.

Solução: Verifique a lógica do seu código e corrija os erros de sintaxe do comando.

Unkillable script with write commands

Causa possível: O script Lua atual já realizou operações de escrita. Nesse caso, não é possível executar o comando SCRIPT KILL.

Solução: Localize a instância no console e clique em restart na coluna Actions. Para obter mais informações, consulte Restart an instance.

UNKILLABLE: Cannot kill replicated scripts

Causa possível: O nó mestre encaminhou o script Lua atual para o nó réplica correspondente. Nesse caso, não é possível executar o comando SCRIPT KILL.

Solução: Localize a instância no console e clique em restart na coluna Actions. Para obter mais informações, consulte Restart an instance.

NOTBUSY

Causa possível: Nenhum script Lua está em execução.

Solução: Nenhuma operação manual é necessária. Não execute o comando SCRIPT KILL.

Cliente Jedis

Falha na aquisição do pool de recursos

Causa possível: Não é possível obter conexões Jedis do JedisPool.

  • Quando o parâmetro blockWhenExhausted está definido como true (valor padrão), o cliente aguarda alguns milissegundos especificados pelo parâmetro maxWaitMillis se não houver conexões disponíveis no JedisPool. Se o cliente ainda não conseguir obter uma conexão Jedis disponível após esperar por muito tempo, a seguinte exceção será lançada:

    redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
        ...
    Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
        at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:449)
  • Quando o parâmetro blockWhenExhausted está definido como false, a seguinte exceção será lançada se não houver conexões disponíveis no JedisPool:

    redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
        ...
    Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
        at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:449)

Solução: Considere os seguintes aspectos para solucionar o erro:

  • Vazamentos de conexão

    Por padrão, maxTotal é definido como 8. O código abaixo mostra que o cliente Jedis obtém conexões do JedisPool oito vezes, mas não devolve essas conexões. Por isso, o cliente Jedis não consegue executar o comando jedisPool.getResource().ping() na nona tentativa de obter outra conexão do JedisPool.

    GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
    JedisPool jedisPool = new JedisPool(poolConfig, "127.0.0.1", 6379);
    // The client borrows connections from JedisPool for eight times, but does not return these connections. 
    for (int i = 0; i < 8; i++) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            jedis.ping();
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
    }
    jedisPool.getResource().ping();

    Código recomendado:

    Jedis jedis = null;
    try {
        jedis = jedisPool.getResource();
        // The command that you want to run. 
        jedis.executeCommand()
    } catch (Exception e) {
        // If the command involves a key, we recommend that you make configurations to display the key in error logs. This way, you can use the key to identify the data shard on which issues occur. 
        logger.error(e.getMessage(), e);
    } finally {
        // The client does not close a borrowed connection. Instead, the client returns the connection to JedisPool. 
        if (jedis != null) 
            jedis.close();
    }
  • Valor baixo para o parâmetro maxTotal

    Quando o sistema processa muitas operações simultaneamente, um valor baixo para o parâmetro maxTotal pode causar exceções. Por exemplo, suponha que leve cerca de 1 ms para executar um comando em média. Isso é calculado usando a seguinte fórmula: Amount of time consumed to borrow or return resources + Tempo consumido para o Jedis executar o comando + Latência de rede. O número de consultas por segundo (QPS) de uma conexão é cerca de 1.000, e o QPS total esperado é 50.000. Teoricamente, você precisa de um valor maxTotal de 50 para atingir o QPS esperado de 50.000. O valor maxTotal é obtido dividindo 50.000 por 1.000.

    Nesse caso, execute o seguinte comando no seu cliente para obter o número de conexões do cliente. Ajuste o valor de maxTotal com base no valor obtido.

    netstat -an | grep 6379 | grep EST | wc -l
  • Bloqueio de conexão

    Quando as conexões com a instância Tair são bloqueadas devido a motivos como consultas lentas, todas as conexões aguardam dentro do período de tempo limite especificado. Nesse cenário, ao processar muitas operações simultaneamente, um erro de tempo limite pode ser relatado. Para obter mais informações, consulte java.net.SocketTimeoutException: connect timed out.

  • Conexão rejeitada

    Ao tentar obter uma conexão do JedisPool sem conexões disponíveis, o Jedis tenta criar uma conexão Jedis. No entanto, a tentativa de conexão é rejeitada e uma exceção é lançada. Exemplo:

    redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
        at redis.clients.util.Pool.getResource(Pool.java:50)
        at redis.clients.jedis.JedisPool.getResource(JedisPool.java:99)
        at TestAdmin.main(TestAdmin.java:14)
    Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.ConnectException: Connection refused
        at redis.clients.jedis.Connection.connect(Connection.java:164)
        at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:80)
        at redis.clients.jedis.BinaryJedis.connect(BinaryJedis.java:1676)
        at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:87)
        at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:861)
        at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:435)
        at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:363)
        at redis.clients.util.Pool.getResource(Pool.java:48)
        ... 2 more
    Caused by: java.net.ConnectException: Connection refused
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:579)
        at redis.clients.jedis.Connection.connect(Connection.java:158)
        ... 9 more

    at redis.clients.jedis.Connection.connect(Connection.java:158) indica que o Jedis tenta criar uma conexão de socket e invocar a função connect, mas a tentativa de conexão é rejeitada. Código-fonte do Jedis:

    socket.setSoLinger(true, 0); 
    158:  socket.connect(new InetSocketAddress(host, port), connectionTimeout);

    Normalmente, para resolver esse problema, verifique se a configuração do nome de domínio da instância Tair está correta e verifique a conexão de rede no período correspondente.

java.net.SocketTimeoutException: connect timed out

Causa possível: A conexão entre o cliente e a instância Tair atingiu o tempo limite.

Solução: Consulte o tópico How do I troubleshoot connection issues in Tair?.

java.net.SocketTimeoutException: Read timed out

Causa possível: Uma chamada de API do Jedis atingiu o tempo limite devido a conexão de rede instável, períodos curtos de tempo limite de leitura/gravação, consultas lentas ou bloqueio de conexão.

Solução: Aumente o período de tempo limite ou realize instance diagnostics para verificar se ocorreu um problema de desempenho ou uma exceção no momento correspondente.

Nota

Se esse erro ocorrer no DMS, o endpoint da VPC ou a porta podem ter sido alterados. No console do DMS, clique com o botão direito na instância na lista de database instance e selecione Edit Instance. Defina Entry Method como Connection String Address, insira o endpoint atualizado em Connection String Address e tente novamente.

No reachable node in cluster

Causa possível: O JedisCluster está inacessível.

Solução: Na primeira vez que o cliente se conectar à instância Tair, verifique se o endereço IP do cliente foi adicionado a uma lista de permissões da instância Tair. Se esta não for a primeira conexão com a instância Tair, realize instance diagnostics para identificar a causa.

Caused by: java.lang.NumberFormatException: For input string: "6379@13028"

Causa possível: O ClusterNodeInformationParser foi introduzido no Jedis 2.8.0 e anteriores para analisar a saída de cluster slots. No entanto, o Redis open source alterou o tipo da saída, o que causa o erro NumberFormatException.

Solução: Atualize seu cliente Jedis para a versão 2.9.0 ou posterior.

No more cluster attempts left

Causa possível: Uma chamada de API atingiu o tempo limite e as cinco tentativas também falharam. Por padrão, após o tempo limite de uma chamada de API, o JedisCluster tenta cinco vezes.

Solução: Aumente o período de tempo limite ou realize instance diagnostics.

Unexpected end of stream

Causa possível: Ocorreu uma exceção no buffer do cliente Jedis. Considere os seguintes aspectos para solucionar o erro:

  • Múltiplas threads compartilhando uma conexão

    Normalmente, uma thread usa uma conexão Jedis. O código abaixo mostra duas threads compartilhando uma conexão Jedis:

    new Thread(new Runnable() {
        public void run() {
            for (int i = 0; i < 100; i++) {
                jedis.get("hello");
            }
        }
    }).start();
    new Thread(new Runnable() {
        public void run() {
            for (int i = 0; i < 100; i++) {
                jedis.hget("haskey", "f");
            }
        }
    }).start();

    Para evitar esse problema e garantir a segurança das threads, utilize o JedisPool para gerenciar as conexões Jedis.

  • Conexões ociosas por longo período

    O servidor fecha conexões ociosas por longo período. Consulte as configurações de timeout da instância e as configurações relacionadas do JedisPool para determinar se é necessário verificar e limpar periodicamente conexões ociosas por longo período.

    Nota

    Por padrão, o Tair não fecha uma conexão ociosa por longo período. Se você modificar o valor do parâmetro timeout, esse erro poderá ser relatado. Para obter mais informações, consulte Specify a timeout period for idle client connections.

Solução: Verifique se várias threads compartilham o código Jedis ou se o servidor fechou uma conexão ociosa por longo período.

java.lang.Long cannot be cast to java.util.List

Causa possível: Este erro é relatado se a mesma conexão Jedis for compartilhada entre várias threads. Isso ocorre porque o próprio Jedis não é seguro para threads e não deve ser usado simultaneamente em várias threads.

Solução: Use uma conexão Jedis em uma única thread. Para isso, utilize o JedisPool.

Broken pipe (Write failed)

Causa possível: Após ocorrer um erro de tempo limite no cliente Jedis no modo de conexão única e o cliente fechar o socket, você continua gravando dados na instância.

Solução: Use uma conexão Jedis em uma única thread. Para isso, utilize o JedisPool.

Keys are in different slots

Causa possível: O JedisCluster realiza operações em chaves que residem em slots diferentes.

Solução: Modifique as chaves por meio de hash tags.

Nota

Você também pode usar o modo proxy para contornar as limitações da arquitetura cluster.

Cliente Lettuce

Connection to xxx not allowed. This partition is not known in the cluster view.

Causa possível: Por padrão, validateClusterNodeMembership é definido como true e refreshOption é definido como null para o cliente Lettuce. Após a alteração do endereço de roteamento da instância Tair, a tabela de rotas não é atualizada porque refreshOption está definido como null. Nesse caso, o erro é relatado para validateClusterNodeMembership.

Solução: Especifique o parâmetro refreshOption e defina o parâmetro validateClusterNodeMembership como false. Para obter mais informações, consulte Lettuce.

io.lettuce.core.RedisConnectionException: Unable to connect xxx

Causa possível: A conexão entre o cliente e a instância Tair atingiu o tempo limite.

Solução: Consulte o tópico How do I troubleshoot connection issues in Tair?.

java.nio.channels.UnresolvedAddressException

Causa possível: O erro ocorre provavelmente devido à versão do Netty.

Solução: Atualize sua dependência do Netty. spring-projects/spring-boot#14307.

ERR Unknown sentinel subcommand 'master'

Causa possível: No modo Sentinel master-replica, o cliente Lettuce envia o comando Sentinel master/slave para a instância Tair. No entanto, uma instância no modo compatível com Sentinel oferece suporte apenas ao comando Sentinel get-master-addr-by-name.

Solução: Modifique seu código para alternar para um modo não-Sentinel. O Tair usa um componente interno de alta disponibilidade. Você não precisa usar o modo compatível com Sentinel.

Erro 'Unknown command' para protocolo RESP3 não suportado

Causa possível: O Redis 6.0 e posteriores oferecem suporte ao protocolo RESP3. Execute o comando HELLO para alternar a conexão para a versão desejada do protocolo RESP. No entanto, algumas instâncias de versões anteriores não oferecem suporte ao comando HELLO, causando problemas de compatibilidade.

Solução: Configure seu programa para usar o protocolo RESP2 ao acessar a instância Tair. Exemplo:

client.setOptions(ClientOptions.builder()
    .protocolVersion(ProtocolVersion.RESP2)
    .build());

Exemplo quando Spring Data Redis com Lettuce é usado como cliente Redis:

LettuceClientConfiguration lettuceClientConfiguration = LettuceClientConfiguration.builder().
    clientOptions(ClientOptions.builder().protocolVersion(ProtocolVersion.RESP2).build()).build();

return new LettuceConnectionFactory(redisClusterConfiguration, lettuceClientConfiguration);

Cliente Redisson

org.redisson.client.RedisConnectionException: Unable to connect to Redis server xxx

Causa possível: A conexão entre o cliente e a instância Tair atingiu o tempo limite.

Solução: Consulte o tópico How do I troubleshoot connection issues in Tair?.

No enum constant org.redisson.cluster.ClusterNodeInfo.Flag.NOFAILOVER

Causa possível: Bug conhecido em versões anteriores do Redisson. redisson/redisson#2399.

Solução: Atualize seu cliente Redisson para a versão 3.11.6 ou posterior.

Cliente Spring Data Redis

NOPERM this user has no permissions to run the 'config|get' command

Causa possível: A versão da sua instância é exibida como Redis 7,0 na página de Informações da Instância. O comando CONFIG está desativado em instâncias Tair (compatível com Redis OSS) que executam o Redis 7,0.

Na inicialização, o Spring Data Redis executa o comando CONFIG SET para definir o parâmetro notify-keyspace-events e ativar o KeyspaceEventMessageListener. Como os comandos CONFIG GET/SET estão desativados, isso falha com um erro de inicialização.

Solução: Defina keyspaceNotificationsConfigParameter como uma string vazia. Código de exemplo: SpringRedisTest.zip. Spring Data Redis.

@EnableRedisRepositories(enableKeyspaceEvents = RedisKeyValueAdapter.EnableKeyspaceEvents.ON_STARTUP, keyspaceNotificationsConfigParameter = "")

Se você usar KeyExpirationListener, também defina keyspaceNotificationsConfigParameter como uma string vazia no construtor.

public RedisKeyExpirationListener(RedisMessageListenerContainer redisMessageListenerContainer) {
    super(redisMessageListenerContainer);
    setKeyspaceNotificationsConfigParameter(""); // Important
}

Cliente StackExchange.Redis

Multiple databases not supported

Causa possível: Instâncias de cluster não oferecem suporte ao comando SELECT.

Solução: Defina o parâmetro cluster_compat_enable como 0 para desativar a compatibilidade com a sintaxe do Redis Cluster open source. Em seguida, reinicie seu cliente e tente novamente. Para obter mais informações, consulte Configure instance parameters.

Cliente Predis

Error while reading line from the server

Causa possível: A solicitação de leitura atingiu o tempo limite. Uma consulta lenta pode estar em andamento.

Solução: Aumente o período de tempo limite ou defina read_write_timeout como 0 ou -1. Para obter mais informações, consulte Perguntas sobre Predis.

Cliente Phpredis

Cannot assign requested address

Causa possível: O cliente se conecta à instância Tair por meio de uma conexão de curta duração.

Solução: Altere o método de conexão de connect para pconnect, ou modifique o parâmetro de kernel tcp_max_tw_buckets na instância ECS do cliente. "Cannot assign requested address" error.

redis protocol error, got ' ' as reply type byte

Causa possível: Bug em uma versão desatualizada do phpredis. phpredis/phpredis#1585.

Solução: Atualize o phpredis para a versão mais recente.

php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution

Solução: Configure o servidor DNS corretamente. Para obter mais informações, consulte Como solucionar problemas de conexão causados por falha na resolução de DNS?

Causa possível: O cliente não consegue resolver o nome de domínio da instância Tair.

Cliente Go-redis

panic: got 4 elements in cluster info address, expected 2 or 3

Causa possível: Versão do cliente Go-redis incompatível com Redis 7,0 ou posterior. redis/go-redis#2085.

Solução: Use go-redis 9,0 ou posterior.

Cliente Node-redis

SCAN command loops infinitely or returns no data

Causa possível: O comando SCAN pode retornar um valor de cursor que excede o inteiro seguro máximo do JavaScript, Number.MAX_SAFE_INTEGER. Isso leva a um cursor impreciso e a um loop infinito. redis/node-redis#2561.

Solução: Atualize seu cliente node-redis para a versão 5.0.0 ou posterior.