Risolvere i problemi di perdita di dati in Cache Redis di Azure

Questo articolo illustra come diagnosticare le perdite di dati effettive o percepite che potrebbero verificarsi in Cache Redis di Azure.

Nota

Diversi passaggi per la risoluzione dei problemi illustrati in questa guida includono istruzioni per eseguire comandi di Redis e monitorare svariate metriche delle prestazioni. Per altre informazioni e istruzioni, vedere gli articoli della sezione Informazioni aggiuntive .

Perdita parziale di chiavi

Cache Redis di Azure non elimina in modo casuale le chiavi una volta archiviate in memoria. Tuttavia, rimuove le chiavi in risposta ai criteri di scadenza o rimozione e ai comandi espliciti di eliminazione della chiave. È possibile eseguire questi comandi nella console o tramite l'interfaccia della riga di comando.

Inoltre, le chiavi che sono state scritte nel nodo primario in un'istanza Premium o Standard di Cache Redis di Azure potrebbero non essere immediatamente disponibili in una replica. I dati vengono replicati dal primario alla replica in modo asincrono e non bloccante.

Se si ritiene che delle chiavi siano scomparse dalla cache, verificare le possibili cause seguenti:

Causa Descrizione
Scadenza della chiave Le chiavi vengono rimosse a causa dei timeout impostati.
Rimozione della chiave Le chiavi vengono rimosse in condizioni di utilizzo elevato della memoria.
Eliminazione della chiave Le chiavi vengono rimosse con comandi di eliminazione espliciti.
Replica asincrona Le chiavi non sono disponibili in una replica a causa di ritardi nella replica dei dati.

Scadenza della chiave

Cache Redis di Azure rimuove automaticamente una chiave se le è stato assegnato un timeout e il periodo è scaduto. Per altre informazioni sulla scadenza della chiave Redis, vedere la documentazione del comando EXPIRE. I valori di timeout possono essere impostati anche usando i comandi SET, SETEX, GETSET e altri *STORE .

Per ottenere statistiche sul numero di chiavi scadute, usare il comando INFO. La sezione Stats mostra il numero totale di chiavi scadute. La sezione Keyspace fornisce ulteriori informazioni sul numero di chiavi con timeout e il valore di timeout medio.


# Stats

expired_keys:46583

# Keyspace

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

È anche possibile esaminare le metriche di diagnostica per la cache, per verificare se esista una correlazione tra il momento in cui la chiave è scomparsa e un picco di scadenza delle chiavi. Per informazioni sull'uso keyspace delle notifiche o MONITOR sul debug di questi tipi di problemi, vedere l'Appendice degli errori di Keyspace Redis.

Rimozione della chiave

Cache Redis di Azure per Redis richiede spazio di memoria per archiviare i dati. Quando necessario, elimina le chiavi per liberare memoria disponibile. Quando i valori used_memory o used_memory_rss nel comando INFO si avvicinano all'impostazione maxmemory configurata, Cache Redis di Azure avvia la rimozione delle chiavi dalla memoria in base ai criteri della cache.

È possibile monitorare il numero di chiavi rimosse usando il comando INFO:

# Stats

evicted_keys:13224

È anche possibile esaminare le metriche di diagnostica per la cache, per verificare se esista una correlazione tra il momento in cui la chiave è scomparsa e un picco di rimozione delle chiavi. Per informazioni sull'uso delle notifiche dello spazio delle chiavi o di MONITOR per il debug dei problemi di questo tipo, vedere l'appendice di Debugging Redis Keyspace Misses (Debug dei mancati riscontri nello spazio delle chiavi Redis).

Eliminazione della chiave

I client Redis possono eseguire il comando DEL o HDEL per rimuovere in modo esplicito le chiavi dalla cache di Azure per Redis. Si può tenere traccia del numero di operazioni di eliminazione usando il comando INFO. Se sono stati chiamati comandi DEL o HDEL, verranno elencati nella sezione 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 asincrona

Qualsiasi istanza di cache di Azure per Redis nel livello Standard o Premium è configurata con un nodo primario e almeno una replica. I dati sono copiati dal database primario a una replica in modo asincrono usando un processo in background. Il sito Web redis.io descrive il funzionamento generale della replica dei dati di Redis. Per gli scenari in cui i client scrivono spesso in Redis, la perdita parziale di dati può verificarsi perché non è garantito che la replica sia istantanea. Ad esempio, se il database primario diventa inattivo dopo che un client vi scrive una chiave, ma prima che il processo in background abbia la possibilità di inviare tale chiave alla replica, la chiave viene persa quando la replica assume come nuova replica primaria.

Perdita importante o totale delle chiavi

Se la maggior parte o tutte le chiavi sono scomparse dalla cache, verificare le possibili cause seguenti:

Causa Descrizione
Scaricamento delle chiavi Le chiavi sono state eliminate manualmente.
Selezione del database errato Cache Redis di Azure per Redis è impostato per l'uso di un database non predefinito.
Errore dell'istanza di Redis Il server Redis non è disponibile.

Scaricamento delle chiavi

I client possono chiamare il comando FLUSHDB per rimuovere tutte le chiavi in un unico database o FLUSHALL per rimuovere tutte le chiavi da tutti i database in una cache Redis. Per verificare se le chiavi sono state scaricate, usare il comando INFO. La Commandstats sezione mostra se uno dei FLUSH due comandi è stato chiamato:

# Commandstats

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

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

Selezione del database errato

cache di Azure per Redis usa il db0 database per impostazione predefinita. Se si passa a un altro database (ad esempio db1, ) e si tenta di leggere le chiavi da esso, cache di Azure per Redis non li troverà lì. Ogni database è un'unità separata logicamente e include un set di dati diverso. Usare il comando SELECT comando per usare altri database disponibili e cercare le chiavi in ognuno di essi.

Errore dell'istanza di Redis

Redis è un archivio dati in memoria. I dati vengono conservati nelle macchine fisiche o virtuali che ospitano la cache Redis. Un'istanza di Cache Redis di Azure per l'istanza di Redis nel livello Basic viene eseguita su un'unica macchina virtuale. Se la macchina virtuale è inattiva, tutti i dati archiviati nella cache vanno persi.

Le cache nei livelli Standard e Premium offrono una resilienza molto superiore rispetto alla perdita di dati, usando due macchine virtuali in una configurazione replicata. Quando si verifica un errore nel nodo primario di una cache di questo tipo, il nodo di replica assume automaticamente il controllo per inviare i dati. Queste macchine virtuali si trovano in domini distinti per gli errori e gli aggiornamenti, per ridurre al minimo le possibilità che entrambi diventino non disponibili contemporaneamente. Se si verifica un'interruzione grave nel data center, tuttavia, è comunque possibile che le macchine virtuali diventino inattive contemporaneamente. In questi rari casi, i dati andranno persi.

Prendere in considerazione l'uso della persistenza dei dati Redis e la replica geografica per migliorare la protezione dei dati in caso di errori dell'infrastruttura.

Informazioni aggiuntive

Questi articoli forniscono altre informazioni su come evitare la perdita di dati: