Partilhar via


Resolver problemas de perda de dados da Cache do Azure para Redis

Este artigo descreve como diagnosticar a perda de dados parcial ou completa que ocorre no Cache do Azure para Redis.

Perda parcial da chave

O Cache Redis do Azure não exclui chaves aleatoriamente depois que elas são armazenadas na memória, mas remove chaves em resposta a políticas de expiração, políticas de remoção e comandos explícitos de exclusão de chaves. Você pode executar esses comandos no console ou através da CLI do Redis.

As chaves gravadas no nó principal numa instância Premium ou Standard do Azure Redis podem não estar disponíveis numa réplica imediatamente. Os dados são replicados do primário para a réplica de forma assíncrona e sem bloqueios.

Se algumas chaves desaparecerem do cache, verifique as seguintes causas possíveis:

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

Expiração da chave

O Cache Redis do Azure remove uma chave automaticamente se for atribuído um tempo limite à chave e esse período passar. Para obter mais informações sobre a expiração da chave Redis, consulte a documentação do comando Redis EXPIRE . Os valores de tempo limite também podem ser definidos usando os comandos SET, SETEX,GETSET e outros *STORE .

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

# Stats

expired_keys:46583

# Keyspace

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

Despejo de chaves

O Cache Redis do Azure requer espaço de memória para armazenar dados e limpa chaves para liberar memória disponível quando necessário. Quando os valores used_memory ou used_memory_rss se aproximam da configuração definida maxmemory, o Azure Redis começa a remover 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

Exclusão de chave

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

# 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

As instâncias do Azure Cache para Redis das camadas Standard ou Premium são configuradas com um nó primário e pelo menos uma réplica. Os dados são copiados do primário para uma réplica de forma assíncrona usando um processo em segundo plano.

A replicação do Redis no site do Redis descreve como a replicação de dados do Redis funciona em geral. Para cenários em que os clientes gravam no Redis com frequência, a perda parcial de dados pode ocorrer porque a replicação não foi projetada para ser instantânea.

Por exemplo, se o primário ficar inativo depois que um cliente gravar uma chave nele, mas antes que o processo em segundo plano tenha a chance de enviar essa chave para a réplica, a chave será perdida quando a réplica assumir o controle como o novo primário.

Perda completa da chave

Se a maioria ou todas as chaves desaparecerem do cache, verifique as seguintes causas possíveis:

Causa Descrição
Lavagem de chaves As chaves foram eliminadas manualmente.
Seleção incorreta do banco de dados O Azure Redis está 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.

Lavagem de chaves

Os clientes Redis do Azure podem chamar o comando Redis FLUSHDB para remover todas as chaves em um único banco de dados ou FLUSHALL para remover todas as chaves de todos os bancos de dados em um cache Redis. Para saber se as chaves foram liberadas, use o comando INFO . A Commandstats seção mostra se um dos comandos 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 incorreta do banco de dados

Cada base de dados é uma unidade logicamente separada e contém um conjunto de dados diferente. O Cache Redis do Azure usa o db0 banco de dados por padrão. Se você alternar para outro banco de dados, como db1 e tentar ler chaves dele, o Azure Redis não as encontrará. Use o comando Redis SELECT para procurar chaves em outros bancos de dados disponíveis.

Falha na instância de Redis

O Redis mantém os dados na memória nas máquinas físicas ou virtuais (VMs) que hospedam o cache do Redis. Uma instância do Cache do Azure para Redis de camada básica é executada em apenas uma única máquina virtual (VM). Se essa VM ficar inativa, todos os dados armazenados no cache serão perdidos.

Os caches nas camadas Standard e Premium oferecem maior resiliência contra perda de dados usando duas VMs em uma configuração replicada. Quando o nó primário dessa cache falha, o nó de réplica assume o controlo para servir dados automaticamente.

Essas VMs estão localizadas em domínios separados para falhas e atualizações, para minimizar a chance de ambas as VMs ficarem indisponíveis ao mesmo tempo. No entanto, se ocorrer uma grande interrupção do datacenter, ambas as VMs poderão ficar inativas. Nestes casos raros, os seus dados são perdidos. Considere o uso da persistência de dados e da replicação geográfica para melhorar a proteção dos dados contra falhas de infraestrutura.