Dela via


Felsöka dataförlust i Azure Cache for Redis

Den här artikeln beskriver hur du diagnostiserar partiell eller fullständig dataförlust som inträffar i Azure Cache for Redis.

Viktigt!

Azure Cache for Redis meddelade sin tidslinje för pensionering för alla SKU:er. Vi rekommenderar att du flyttar dina befintliga Azure Cache for Redis-instanser till Azure Managed Redis så snart du kan.

Mer information om pensionering:

Partiell nyckelförlust

Azure Cache for Redis tar inte bort nycklar slumpmässigt när de har lagrats i minnet, men det tar bort nycklar som svar på förfalloprinciper, borttagningsprinciper och explicita kommandon för nyckelborttagning. Du kan köra dessa kommandon i konsolen eller via Redis CLI.

Nycklar som skrivits till den primära noden i en Premium- eller Standard Azure Redis-instans, kanske inte är tillgängliga på en replika direkt. Data replikeras från den primära till repliken på ett asynkront och icke-blockerande sätt.

Om vissa nycklar försvinner från cacheminnet kontrollerar du följande möjliga orsaker:

Orsak Beskrivning
Nyckel förfallodatum Nycklar har tagits bort eftersom tidsgränser har angetts för dem.
Nyckelavhysning Nycklar togs bort under minnesbelastning.
Nyckelborttagning Nycklar har tagits bort med explicita borttagningskommandon.
Asynkron replikering Nycklar var inte tillgängliga på en replik på grund av datareplikeringsfördröjningar.

Nyckelns utgångsdatum

Azure Cache for Redis tar bort en nyckel automatiskt om nyckeln tilldelas en tidsgräns och perioden går. Mer information om redis-nyckelns förfallodatum finns i redis EXPIRE-kommandodokumentationen . Timeout-värden kan också anges med hjälp av SET, SETEX, GETSET och andra *STORE kommandon.

Om du vill få statistik över hur många nycklar som har upphört att gälla använder du kommandot INFO . Avsnittet Stats visar det totala antalet utgångna nycklar. Avsnittet Keyspace innehåller mer information om antalet nycklar med tidsgränser och det genomsnittliga timeout-värdet.

# Stats

expired_keys:46583

# Keyspace

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

Nyckelavhysning

Azure Cache for Redis kräver minnesutrymme för att lagra data och rensar nycklar för att frigöra tillgängligt minne vid behov. used_memory När värdena eller used_memory_rss närmar sig den konfigurerade maxmemory inställningen börjar Azure Redis ta bort nycklar från minnet baserat på cacheprincip.

Du kan övervaka antalet borttagna nycklar med hjälp av KOMMANDOT INFO .

# Stats

evicted_keys:13224

Nyckelborttagning

Redis-klienter kan utfärda Redis DEL - eller HDEL-kommandon för att uttryckligen ta bort nycklar från Azure Redis. Du kan spåra antalet borttagningsåtgärder med hjälp av KOMMANDOT INFO . Om DEL eller HDEL kommandon anropades visas de i avsnittet Commandstats .

# Commandstats

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

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

Asynkron replikering

Azure Cache for Redis-instanser på Standard- eller Premium-nivå konfigureras med en primär nod och minst en replik. Data kopieras från den primära till en replik asynkront med hjälp av en bakgrundsprocess.

Redis-replikering på Redis webbplats beskriver hur Redis-datareplikering fungerar i allmänhet. För scenarier där klienter skriver till Redis ofta kan partiell dataförlust inträffa eftersom replikeringen inte är utformad för att vara omedelbar.

Om det primära exemplet går ner efter att en klient har skrivit en nyckel till den, men innan bakgrundsprocessen har en chans att skicka nyckeln till repliken, kommer nyckeln att gå förlorad när repliken tar över som den nya primära.

Fullständig nyckelförlust

Om de flesta eller alla nycklar försvinner från cacheminnet kontrollerar du följande möjliga orsaker:

Orsak Beskrivning
Nyckelspolning Nycklarna rensades manuellt.
Felaktig databasmarkering Azure Redis är inställt på att använda en nondefault-databas.
Redis-instansfel Redis-servern är inte tillgänglig.

Rensning av nycklar

Azure Redis-klienter kan anropa Redis FLUSHDB-kommandot för att ta bort alla nycklar i en enskild databas eller FLUSHALL för att ta bort alla nycklar från alla databaser i en Redis-cache. Om du vill ta reda på om nycklarna har tömts använder du INFO-kommandot . Avsnittet Commandstats visar om något av FLUSH kommandona anropades.

# Commandstats

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

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

Felaktig databasmarkering

Varje databas är en logiskt separat enhet och innehåller en annan datauppsättning. Azure Cache for Redis använder db0 databasen som standard. Om du växlar till en annan databas, till exempel db1 och försöker läsa nycklar från den, hittar Inte Azure Redis dem. Använd kommandot Redis SELECT för att leta efter nycklar i andra tillgängliga databaser.

Redis-instansfelaktighet

Redis lagrar data i minnet på de fysiska eller virtuella datorer som är värdar för Redis-cachen. En Azure Cache for Redis-instans på Basic-nivå körs endast på en enda virtuell dator (VM). Om den virtuella datorn slutar fungera går alla data som du lagrade i cacheminnet förlorade.

Cacheminnen på standard- och Premium-nivåerna erbjuder högre motståndskraft mot dataförlust med hjälp av två virtuella datorer i en replikerad konfiguration. När den primära noden i en sådan cache misslyckas tar repliknoden över för att tillhandahålla data automatiskt.

Dessa virtuella datorer finns på separata domäner för fel och uppdateringar, för att minimera risken för att båda de virtuella datorerna blir otillgängliga samtidigt. Om ett större datacenterstopp inträffar kan dock båda de virtuella datorerna gå ned. I dessa sällsynta fall går dina data förlorade. Överväg att använda datapersistence och geo-replikering för att förbättra dataskyddet mot infrastrukturfel.