Problemen met gegevensverlies in Azure Cache voor Redis oplossen

In dit artikel wordt beschreven hoe u werkelijke of waargenomen gegevensverlies kunt diagnosticeren die zich kunnen voordoen in Azure Cache voor Redis.

Notitie

Enkele van de stappen voor probleemoplossing in deze handleiding bevatten instructies voor het uitvoeren van Redis-opdrachten en het bewaken van verschillende prestatiemetrieken. Zie de artikelen in de sectie Aanvullende informatie voor meer informatie en instructies.

Gedeeltelijk verlies van sleutels

Azure Cache voor Redis worden sleutels niet willekeurig verwijderd nadat ze in het geheugen zijn opgeslagen. Er worden echter wel sleutels verwijderd als reactie op verloop- of verwijderingsbeleid en expliciete opdrachten voor het verwijderen van sleutels. Sleutels die naar het primaire knooppunt in een Premium- of Standard Azure Cache voor Redis-exemplaar zijn geschreven, zijn mogelijk niet direct beschikbaar op een replica. Gegevens worden asynchroon en niet-blokkerend gerepliceerd van de primaire naar de replica.

Als u ziet dat sleutels uit uw cache zijn verdwenen, controleert u de volgende mogelijke oorzaken:

Oorzaak Description
Vervaldatum van sleutel Sleutels worden verwijderd vanwege time-outs die erop zijn ingesteld.
Sleuteluitzetting Sleutels worden verwijderd onder geheugendruk.
Sleutel verwijderen Sleutels worden verwijderd door expliciete verwijderopdrachten.
Asynliceren Sleutels zijn niet beschikbaar op een replica vanwege vertragingen in de gegevensreplicatie.

Vervaldatum van sleutel

Azure Cache voor Redis sleutel wordt automatisch verwijderd als aan de sleutel een time-out is toegewezen en die periode is verstreken. Zie de expire-opdrachtdocumentatie voor meer informatie over het verlopen van redis-sleutels. Time-outwaarden kunnen ook worden ingesteld met behulp van de opdrachten SET, SETEX, GETSETen * andere STORE.

Gebruik de opdracht INFO om statistieken te krijgen over het aantal sleutels dat is verlopen. In Stats de sectie ziet u het totale aantal verlopen sleutels. De Keyspace sectie bevat meer informatie over het aantal sleutels met time-outs en de gemiddelde time-outwaarde.

# Stats

expired_keys:46583

# Keyspace

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

U kunt ook diagnostische metrische gegevens voor uw cache bekijken om te zien of er een correlatie is tussen het ontbreken van de sleutel en een piek in verlopen sleutels. Zie de bijlage voor foutopsporing van Redis Keyspace-missers voor informatie over het gebruik van keyspacemeldingen of MONITOR om fouten op te sporen in dit soort problemen.

Sleuteluitzetting

Azure Cache voor Redis vereist geheugenruimte voor het opslaan van gegevens. Sleutels worden opsgeslagen om beschikbaar geheugen vrij te maken wanneer dat nodig is. Wanneer de used_memory- of used_memory_rss-waarden in de INFO-opdracht de geconfigureerde maxmemory-instelling benaderen, begint Azure Cache voor Redis met het verwijderen van sleutels uit het geheugen op basis van cachebeleid.

U kunt het aantal verloren sleutels bewaken met behulp van de opdracht INFO:

# Stats

evicted_keys:13224

U kunt ook diagnostische metrische gegevens voor uw cache bekijken om te zien of er een correlatie is tussen het ontbreken van de sleutel en een piek in verwijderde sleutels. Zie de bijlage voor foutopsporing van Redis Keyspace-missers voor informatie over het gebruik van keyspacemeldingen of MONITOR om fouten op te sporen in dit soort problemen.

Sleutel verwijderen

Redis-clients kunnen de del- of HDEL-opdracht geven om sleutels expliciet te verwijderen uit Azure Cache voor Redis. U kunt het aantal verwijderbewerkingen bijhouden met behulp van de opdracht INFO. Als DEL- of HDEL-opdrachten zijn aangeroepen, worden deze weergegeven in de Commandstats sectie .

# Commandstats

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

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

Asynliceren

Elk Azure Cache voor Redis in de laag Standard of Premium is geconfigureerd met een primair knooppunt en ten minste één replica. Gegevens worden asynchroon van de primaire naar een replica gekopieerd met behulp van een achtergrondproces. Op redis.io website wordt beschreven hoe Redis-gegevensreplicatie in het algemeen werkt. Voor scenario's waarbij clients vaak naar Redis schrijven, kan gedeeltelijk gegevensverlies optreden omdat deze replicatie niet onmiddellijk gegarandeerd is. Als de primaire sleutel bijvoorbeeld uitgaat nadat een client er een sleutel naar schrijft, maar voordat het achtergrondproces de kans heeft om die sleutel naar de replica te verzenden, gaat de sleutel verloren wanneer de replica het over neemt als de nieuwe primaire replica.

Groot of volledig verlies van sleutels

Als de meeste of alle sleutels uit uw cache zijn verdwenen, controleert u de volgende mogelijke oorzaken:

Oorzaak Description
Sleutel leeg maken Sleutels zijn handmatig verwijderd.
Onjuiste databaseselectie Azure Cache voor Redis is ingesteld op het gebruik van een niet-standaarddatabase.
Fout met Redis-exemplaar De Redis-server is niet beschikbaar.

Sleutel leeg maken

Clients kunnen de opdracht FLUSHDB aanroepen om alle sleutels in één database te verwijderen of FLUSHALL om alle sleutels uit alle databases in een Redis-cache te verwijderen. Als u wilt weten of de sleutels zijn leeggepokt, gebruikt u de opdracht INFO. In Commandstats de sectie ziet u of een van beide FLUSH-opdrachten is aangeroepen:

# Commandstats

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

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

Onjuiste databaseselectie

Azure Cache voor Redis maakt standaard gebruik van de database db0. Als u overschakelt naar een andere database (bijvoorbeeld db1) en sleutels probeert te lezen, Azure Cache voor Redis u ze daar niet vinden. Elke database is een logisch afzonderlijke eenheid en bevat een andere gegevensset. Gebruik de opdracht SELECT om andere beschikbare databases te gebruiken en te zoeken naar sleutels in elk van deze databases.

Fout met Redis-exemplaar

Redis is een gegevensopslag in het geheugen. Gegevens worden opgeslagen op de fysieke of virtuele machines die de Redis-cache hosten. Een Azure Cache voor Redis in de basic-laag wordt slechts uitgevoerd op één virtuele machine (VM). Als deze VM niet beschikbaar is, gaan alle gegevens die u in de cache hebt opgeslagen verloren.

Caches in de lagen Standard en Premium bieden veel meer tolerantie tegen gegevensverlies door gebruik te maken van twee VM's in een gerepliceerde configuratie. Wanneer het primaire knooppunt in een dergelijke cache uitvalt, neemt het replica-knooppunt het over om gegevens automatisch te verwerken. Deze VM's bevinden zich in afzonderlijke domeinen voor fouten en updates, om de kans te minimaliseren dat beide tegelijkertijd niet beschikbaar zijn. Als er echter een grote datacentrumstoring is, kunnen de VM's samen uit bedrijf gaan. Uw gegevens gaan verloren in deze zeldzame gevallen.

Overweeg het gebruik van Redis-gegevens persistentie en geo-replicatie om de beveiliging van uw gegevens tegen deze infrastructuurfouten te verbeteren.

Aanvullende informatie