Felsöka dataförlust i Azure Cache for RedisTroubleshoot data loss in Azure Cache for Redis

Den här artikeln beskriver hur du diagnostiserar faktiska eller uppfattade data förluster som kan uppstå i Azure cache för Redis.This article discusses how to diagnose actual or perceived data losses that might occur in Azure Cache for Redis.

Anteckning

Flera av fel söknings stegen i den här hand boken innehåller instruktioner för att köra Redis-kommandon och övervaka olika prestanda mått.Several of the troubleshooting steps in this guide include instructions to run Redis commands and monitor various performance metrics. Mer information och instruktioner finns i artiklarna i avsnittet Ytterligare information .For more information and instructions, see the articles in the Additional information section.

Partiell förlust av nycklarPartial loss of keys

Azure cache för Redis tar inte bort nycklar när de har lagrats i minnet.Azure Cache for Redis doesn't randomly delete keys after they've been stored in memory. Den tar dock bort nycklar som svar på principer för förfallo datum eller borttagning och till explicita kommandon för nyckel borttagning.However, it does remove keys in response to expiration or eviction policies and to explicit key-deletion commands. Nycklar som har skrivits till den primära noden i en Premium-eller standard-Azure-cache för Redis-instansen kanske inte heller är tillgängliga på en replik direkt.Keys that have been written to the primary node in a Premium or Standard Azure Cache for Redis instance also might not be available on a replica right away. Data replikeras från den primära till repliken i ett asynkront och icke-blockerande sätt.Data is replicated from the primary to the replica in an asynchronous and non-blocking manner.

Om du upptäcker att nycklarna har försvunnit från cacheminnet kontrollerar du följande möjliga orsaker:If you find that keys have disappeared from your cache, check the following possible causes:

OrsakCause BeskrivningDescription
Nyckel förfallo datumKey expiration Nycklarna tas bort på grund av timeout-inställningar.Keys are removed because of time-outs set on them.
Nyckel borttagningKey eviction Nycklarna tas bort under minnes belastningen.Keys are removed under memory pressure.
Nyckel borttagningKey deletion Nycklar tas bort av explicita borttagnings kommandon.Keys are removed by explicit delete commands.
Asynkron replikeringAsync replication Nycklarna är inte tillgängliga på en replik på grund av fördröjningar vid replikering av data.Keys are not available on a replica because of data-replication delays.

Nyckel förfallo datumKey expiration

Azure cache för Redis tar bort en nyckel automatiskt om nyckeln tilldelas en timeout och den perioden har passerat.Azure Cache for Redis removes a key automatically if the key is assigned a time-out and that period has passed. Mer information om förfallo datum för Redis-nycklar finns i den förfallna kommando dokumentationen.For more information about Redis key expiration, see the EXPIRE command documentation. Timeout-värden kan också anges med hjälp av kommandona set, SETEX, GETSEToch andra * Store .Time-out values also can be set by using the SET, SETEX, GETSET, and other *STORE commands.

Om du vill få statistik om hur många nycklar som har upphört att gälla använder du kommandot info .To get stats on how many keys have expired, use the INFO command. StatsAvsnittet visar det totala antalet utgångna nycklar.The Stats section shows the total number of expired keys. KeyspaceAvsnittet innehåller mer information om antalet nycklar med tids gränser och det genomsnittliga timeout-värdet.The Keyspace section provides more information about the number of keys with time-outs and the average time-out value.

# Stats

expired_keys:46583

# Keyspace

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

Du kan också titta på diagnostiska mått för cacheminnet för att se om det finns en korrelation mellan när nyckeln gick förlorad och en insamling i utgångna nycklar.You can also look at diagnostic metrics for your cache, to see if there's a correlation between when the key went missing and a spike in expired keys. Se tillägget för fel sökning av Redis för att få information om hur du använder meddelanden eller övervakare för att felsöka de här typerna av problem.See the Appendix of Debugging Redis Keyspace Misses for information about using keyspace notifications or MONITOR to debug these types of issues.

Nyckel borttagningKey eviction

Azure cache för Redis kräver minnes utrymme för att lagra data.Azure Cache for Redis requires memory space to store data. Den rensar nycklar för att frigöra tillgängligt minne vid behov.It purges keys to free up available memory when necessary. När used_memory -eller used_memory_rss -värden i informations kommandot närmar sig den konfigurerade maxmemory -inställningen börjar Azure cache för Redis bort nycklar från minnet baserat på en princip för cachelagring.When the used_memory or used_memory_rss values in the INFO command approach the configured maxmemory setting, Azure Cache for Redis starts evicting keys from memory based on cache policy.

Du kan övervaka antalet avlägsnade nycklar med hjälp av kommandot info :You can monitor the number of evicted keys by using the INFO command:

# Stats

evicted_keys:13224

Du kan också titta på diagnostiska mått för cacheminnet för att se om det finns en korrelation mellan när nyckeln gick förlorad och en insamling i avlägsnade nycklar.You can also look at diagnostic metrics for your cache, to see if there's a correlation between when the key went missing and a spike in evicted keys. Se tillägget för fel sökning av Redis för att få information om hur du använder meddelanden eller övervakare för att felsöka de här typerna av problem.See the Appendix of Debugging Redis Keyspace Misses for information about using keyspace notifications or MONITOR to debug these types of issues.

Nyckel borttagningKey deletion

Redis-klienter kan utfärda kommandot del eller HDEL för att explicit ta bort nycklar från Azure cache för Redis.Redis clients can issue the DEL or HDEL command to explicitly remove keys from Azure Cache for Redis. Du kan spåra antalet borttagnings åtgärder med hjälp av kommandot info .You can track the number of delete operations by using the INFO command. Om del -eller HDEL -kommandon har anropats visas de i Commandstats avsnittet.If DEL or HDEL commands have been called, they'll be listed in the Commandstats section.

# Commandstats

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

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

Asynkron replikeringAsync replication

Alla Azure cache för Redis-instanser på standard-eller Premium-nivån konfigureras med en primär nod och minst en replik.Any Azure Cache for Redis instance in the Standard or Premium tier is configured with a primary node and at least one replica. Data kopieras från den primära till en replik asynkront med en bakgrunds process.Data is copied from the primary to a replica asynchronously by using a background process. Redis.io -webbplatsen beskriver hur Redis-datareplikering fungerar i allmänhet.The redis.io website describes how Redis data replication works in general. För scenarier där klienter skriver till Redis ofta kan partiell data förlust uppstå, eftersom replikeringen inte garanterat är omedelbar.For scenarios where clients write to Redis frequently, partial data loss can occur because this replication is not guaranteed to be instantaneous. Till exempel, om den primära slutar när en klient skriver en nyckel till den, men innan bakgrunds processen har möjlighet att skicka nyckeln till repliken, går nyckeln förlorad när repliken tar över som den nya primära.For example, if the primary goes down after a client writes a key to it, but before the background process has a chance to send that key to the replica, the key is lost when the replica takes over as the new primary.

Huvud eller fullständig förlust av nycklarMajor or complete loss of keys

Om de flesta eller alla nycklar har försvunnit från cacheminnet kontrollerar du följande möjliga orsaker:If most or all keys have disappeared from your cache, check the following possible causes:

OrsakCause BeskrivningDescription
Nyckel tömningKey flushing Nycklar har rensats manuellt.Keys have been purged manually.
Felaktigt databas valIncorrect database selection Azure cache för Redis är inställt på att använda en databas som inte är standard.Azure Cache for Redis is set to use a non-default database.
Redis instans-problemRedis instance failure Redis-servern är inte tillgänglig.The Redis server is unavailable.

Nyckel tömningKey flushing

Klienter kan anropa kommandot FLUSHDB 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.Clients can call the FLUSHDB command to remove all keys in a single database or FLUSHALL to remove all keys from all databases in a Redis cache. Om du vill ta reda på om nycklarna har tömts använder du kommandot info .To find out whether keys have been flushed, use the INFO command. I Commandstats avsnittet visas om antingen Flush -kommandot har anropats:The Commandstats section shows whether either FLUSH command has been called:

# Commandstats

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

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

Felaktigt databas valIncorrect database selection

Azure cache för Redis använder DB0 -databasen som standard.Azure Cache for Redis uses the db0 database by default. Om du växlar till en annan databas (till exempel DB1) och försöker läsa nycklar från den, hittar inte Azure cache för Redis dem där.If you switch to another database (for example, db1) and try to read keys from it, Azure Cache for Redis won't find them there. Varje databas är en logiskt separat enhet och innehåller en annan data uppsättning.Every database is a logically separate unit and holds a different dataset. Använd kommandot Välj för att använda andra tillgängliga databaser och leta efter nycklar i var och en av dem.Use the SELECT command to use other available databases and look for keys in each of them.

Redis instans-problemRedis instance failure

Redis är ett minnes intern data lager.Redis is an in-memory data store. Data lagras på fysiska eller virtuella datorer som är värdar för Redis-cachen.Data is kept on the physical or virtual machines that host the Redis cache. En Azure cache för Redis-instans på Basic-nivån körs bara på en enskild virtuell dator (VM).An Azure Cache for Redis instance in the Basic tier runs on only a single virtual machine (VM). Om den virtuella datorn är nere går alla data som du har lagrat i cacheminnet förlorade.If that VM is down, all data that you've stored in the cache is lost.

Cacheminnen på standard-och Premium-nivåerna ger mycket högre återhämtning mot data förlust genom att använda två virtuella datorer i en replikerad konfiguration.Caches in the Standard and Premium tiers offer much higher resiliency against data loss by using two VMs in a replicated configuration. När den primära noden i en sådan cache Miss lyckas, tar replik noden över för att betjäna data automatiskt.When the primary node in such a cache fails, the replica node takes over to serve data automatically. De här virtuella datorerna finns i separata domäner för fel och uppdateringar för att minimera risken för att båda blir otillgängliga samtidigt.These VMs are located on separate domains for faults and updates, to minimize the chance of both becoming unavailable simultaneously. Om ett allvarligt Data Center avbrott inträffar kan de virtuella datorerna fortfarande gå ner tillsammans.If a major datacenter outage happens, however, the VMs might still go down together. Dina data kommer att gå förlorade i dessa sällsynta fall.Your data will be lost in these rare cases.

Överväg att använda Redis data beständighet och geo-replikering för att förbättra skyddet av dina data mot de här infrastruktur felen.Consider using Redis data persistence and geo-replication to improve protection of your data against these infrastructure failures.

Ytterligare informationAdditional information