Solucionar problemas de perda de dados do Cache do Azure para Redis

Este artigo discute como diagnosticar perdas de dados reais ou percebidas que podem ocorrer no Cache do Azure para Redis.

Observação

Várias das etapas de solução de problemas neste guia incluem instruções para executar comandos do Redis e monitorar diversas métricas de desempenho. Para obter mais informações, consulte os artigos na seção Informações adicionais .

Perda parcial de chaves

O Cache do Azure para Redis não exclui as chaves aleatoriamente após elas terem sido armazenadas na memória. No entanto, ele remove as chaves em resposta às políticas de término ou remoção e aos comandos explícitos de exclusão de chaves. Você pode executar esses comandos no console ou por meio da CLI.

As chaves que foram gravadas no nó principal em uma instância do Cache do Azure para Redis Premium ou Standard também podem não estar disponíveis em uma réplica imediatamente. Os dados são replicados do principal para a réplica de maneira assíncrona e sem bloqueio.

Se você descobrir que as chaves desapareceram do cache, verifique as seguintes causas possíveis:

Causa Descrição
Expiração da chave As chaves são removidas devido aos tempos limite definidos.
Remoção de chave As chaves são removidas sob pressão de memória.
Exclusão de chave As chaves são removidas por comandos de exclusão explícitos.
Replicação assíncrona As chaves não estão disponíveis em uma réplica devido a atrasos na replicação de dados.

Expiração da chave

O Cache do Azure para Redis removerá uma chave automaticamente se a chave tiver um tempo limite atribuído e esse período tiver passado. Para obter mais informações sobre o término da chave Redis, confira a documentação do comando EXPIRE. Os valores de tempo limite também podem ser definidos com o conjunto de comandos SET, SETEX, GETSET e outros comandos *STORE.

Para obter estatísticas sobre quantas chaves expiraram, use o comando INFO. A seção Stats mostra o número total de chaves expiradas. A seção Keyspace fornece mais informações sobre o número de chaves com tempos limite e o valor de tempo limite médio.


# Stats

expired_keys:46583

# Keyspace

db0:keys=3450,expires=2,avg_ttl=91861015336

Você também pode examinar as métricas de diagnóstico para o cache para ver se há uma correlação entre quando a chave ficou ausente e um pico nas chaves expiradas. Confira o apêndice de Depuração de falhas de keyspace do Redis para obter informações sobre como usar notificações de keyspace ou MONITOR para depurar esses tipos de problemas.

Remoção de chave

O Cache do Azure para Redis requer espaço de memória para armazenar dados. Ele limpa as chaves para liberar a memória disponível quando necessário. Quando os valores used_memory ou used_memory_rss valores no comando INFO aproximam-se da configuração MaxMemory definida, o Cache do Azure para Redis inicia a remoção de chaves da memória com base na política de cache.

Você pode monitorar o número de chaves removidas usando o comando INFO:

# Stats

evicted_keys:13224

Você também pode examinar as métricas de diagnóstico para o cache para ver se há uma correlação entre quando a chave ficou ausente e um pico nas chaves removidas. Confira o apêndice de Depuração de falhas de keyspace do Redis para obter informações sobre como usar notificações de keyspace ou MONITORAR a depurar desses tipos de problemas.

Exclusão de chave

Os clientes do Redis podem emitir o comando DEL ou HDEL para remover explicitamente as chaves do Cache do Azure para Redis. Você pode acompanhar o número de operações de exclusão usando o comando INFO. Se os comandos DEL ou HDEL tiverem sido chamados, eles serão listados na seção Commandstats.

# Commandstats

cmdstat_del:calls=2,usec=90,usec_per_call=45.00

cmdstat_hdel:calls=1,usec=47,usec_per_call=47.00

Replicação assíncrona

Qualquer instância do Cache do Azure para Redis na camada Standard ou Premium é configurada com um nó principal e pelo menos uma réplica. Os dados são copiados do principal para uma réplica de maneira assíncrona usando um processo em segundo plano. O site redis.io descreve como a replicação de dados do Redis funciona em geral. Para cenários em que os clientes gravam em Redis com frequência, a perda de dados parcial pode ocorrer porque essa replicação não tem garantia de ser instantânea. Por exemplo, se o principal ficar inativo depois de um cliente gravar uma chave nele, mas antes de o processo em segundo plano ter a chance de enviar essa chave para a réplica, a chave será perdida quando a réplica assumir o controle como o novo principal.

Perda grande ou completa de chaves

Se a maioria das chaves ou todas elas tiverem desaparecido do seu cache, verifique as seguintes causas possíveis:

Causa Descrição
Liberação de chave As chaves foram limpas manualmente.
Seleção de banco de dados incorreta O Cache do Azure para Redis é definido para usar um banco de dados não padrão.
Falha na instância do Redis O servidor Redis não está disponível.

Liberação de chave

Os clientes podem chamar o comando FLUSHDB para remover todas as chaves em um banco de dados individual ou FLUSHALL para remover todas as chaves de todos os bancos de dados em um Cache Redis. Para descobrir se as chaves foram liberadas, use o comando INFO. A seção Commandstats mostra se o comando FLUSH foi chamado:

# Commandstats

cmdstat_flushall:calls=2,usec=112,usec_per_call=56.00

cmdstat_flushdb:calls=1,usec=110,usec_per_call=52.00

Seleção de banco de dados incorreta

O Cache do Azure para Redis usa o banco de dados db0 por padrão. Se você alternar para outro banco de dados (por exemplo, db1) e tentar ler chaves dele, o Cache do Azure para Redis não as encontrará. Cada banco de dados é uma unidade separada de maneira lógica e mantém um conjunto de dados diferente. Use o comando SELECT para usar outros bancos de dados disponíveis e procurar chaves em cada um deles.

Falha na instância do Redis

Redis é um armazenamento de dados na memória. Os dados são mantidos nas máquinas virtuais ou físicas que hospedam o Cache Redis. Uma instância do Cache do Azure para Redis na camada básica é executada somente em uma VM (máquina virtual). Se essa VM estiver inativa, todos os dados que você armazenou no cache serão perdidos.

Os caches nas camadas Standard e Premium oferecem resiliência muito maior contra perda de dados usando duas VMs em uma configuração replicada. Quando o nó principal nesse cache falha, o nó da réplica assume para atender aos dados automaticamente. Essas VMs estão localizadas em domínios separados para falhas e atualizações para minimizar a chance de ambas ficarem não disponíveis simultaneamente. No entanto, se ocorrer uma interrupção de datacenter principal, as VMs ainda poderão ficar inativas ao mesmo tempo. Seus dados serão perdidos nesses casos raros.

Considere usar Persistência de dados do Redis e replicação geográfica para aprimorar a proteção de seus dados contra essas falhas de infraestrutura.

Informações adicionais

Estes artigos fornecem mais informações sobre como evitar a perda de dados: