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.