Delen via


Problemen met gegevensverlies in Azure Cache voor Redis oplossen

In dit artikel wordt beschreven hoe u gedeeltelijke of volledige gegevensverlies kunt diagnosticeren die optreden in Azure Cache voor Redis.

Gedeeltelijk sleutelverlies

Azure Cache voor Redis verwijdert sleutels niet willekeurig nadat deze in het geheugen zijn opgeslagen, maar verwijdert sleutels als reactie op verloopbeleid, verwijderingsbeleid en expliciete opdrachten voor sleutelverwijdering. U kunt deze opdrachten uitvoeren op de console of via de Redis CLI.

Sleutels die naar het primaire knooppunt in een Premium- of Standard Azure Redis-exemplaar zijn geschreven, zijn mogelijk niet direct beschikbaar op een replica. Gegevens worden gerepliceerd van de primaire naar de replica op een asynchrone en niet-blokkeringswijze.

Als sommige sleutels uit uw cache verdwijnen, controleert u de volgende mogelijke oorzaken:

Oorzaak Beschrijving
Verlooptijd van sleutel Sleutels zijn verwijderd vanwege timeouts die erop zijn ingesteld.
Sleutelverwijdering Sleutels zijn onder geheugen­druk verwijderd.
Sleutelverwijdering Sleutels zijn verwijderd door expliciete verwijderopdrachten.
Asynchrone replicatie Sleutels waren niet beschikbaar op een replica vanwege vertragingen in gegevensreplicatie.

Verlooptijd van sleutel

Azure Cache voor Redis verwijdert automatisch een sleutel als aan de sleutel een time-out wordt toegewezen en die periode is verstreken. Voor meer informatie over het verlopen van sleutels in Redis, zie de documentatie van het Redis EXPIRE-commando. Time-outwaarden kunnen ook worden ingesteld met behulp van de opdrachten SET, SETEX, GETSET en andere *STORE .

Gebruik de opdracht INFO om statistieken op te halen over het aantal sleutels dat zijn verlopen. In Stats de sectie wordt het totale aantal verlopen sleutels weergegeven. 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

Sleutelverwijdering

Azure Cache voor Redis heeft geheugenruimte nodig om gegevens op te slaan en verwijdert sleutels om indien nodig geheugen vrij te maken. Wanneer de used_memory- of used_memory_rss-waarden de geconfigureerde maxmemory-instelling naderen, verwijdert Azure Redis sleutels uit het geheugen op basis van het cachebeleid.

U kunt het aantal verwijderde sleutels controleren met behulp van de opdracht INFO .

# Stats

evicted_keys:13224

Sleutelverwijdering

Redis-clients kunnen de Redis DEL - of HDEL-opdrachten uitgeven om expliciet sleutels uit Azure Redis te verwijderen. U kunt het aantal verwijderbewerkingen bijhouden met behulp van de opdracht INFO . Als DEL of HDEL opdrachten zijn aangeroepen, worden ze 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

Asynchrone replicatie

Azure Cache voor Redis-exemplaren in de Standard- of Premium-laag worden geconfigureerd met een primair knooppunt en ten minste één replica. Gegevens worden asynchroon gekopieerd van de primaire naar een replica met behulp van een achtergrondproces.

Redis-replicatie op de Redis-website beschrijft hoe redis-gegevensreplicatie in het algemeen werkt. Voor scenario's waarbij clients vaak naar Redis schrijven, kan gedeeltelijk gegevensverlies optreden omdat replicatie niet is ontworpen om onmiddellijk te zijn.

Als de primaire server bijvoorbeeld faalt nadat een client een sleutel daarop schrijft, maar voordat het achtergrondproces de kans krijgt om die sleutel naar de replica te verzenden, gaat de sleutel verloren wanneer de replica als nieuwe primaire server overneemt.

Volledig sleutelverlies

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

Oorzaak Beschrijving
Sleutel leegmaken Sleutels zijn handmatig verwijderd.
Onjuiste databaseselectie Azure Redis is ingesteld op het gebruik van een niet-standaarddatabase.
Fout in Redis-exemplaar De Redis-server is niet beschikbaar.

Sleutel leegmaken

Azure Redis-clients kunnen de opdracht Redis FLUSHDB aanroepen om alle sleutels in één database of FLUSHALL te verwijderen om alle sleutels uit alle databases in een Redis-cache te verwijderen. Gebruik de opdracht INFO om erachter te komen of sleutels zijn leeggemaakt. In de Commandstats 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

Elke database is een logisch gescheiden eenheid en bevat een andere gegevensset. Azure Cache voor Redis maakt standaard gebruik van de db0 database. Als u overschakelt naar een andere database, zoals db1 en probeert sleutels daarvan te lezen, zal Azure Redis deze niet vinden. Gebruik de opdracht Redis SELECT om te zoeken naar sleutels in andere beschikbare databases.

Fout in Redis-exemplaar

Redis bewaart gegevens in het geheugen op de fysieke of virtuele machines (VM's) die als host fungeren voor de Redis-cache. Een Azure Cache voor Redis-exemplaar in de Basic-laag wordt uitgevoerd op slechts één virtuele machine (VM). Als die VIRTUELE machine uitvalt, gaan alle gegevens die u in de cache hebt opgeslagen verloren.

Caches in de Standard- en Premium-lagen bieden een hogere tolerantie tegen gegevensverlies met behulp van twee VM's in een gerepliceerde configuratie. Wanneer het primaire knooppunt in een dergelijke cache uitvalt, neemt het replicaknooppunt het over om gegevens automatisch te leveren.

Deze VM's bevinden zich op afzonderlijke domeinen voor fouten en updates, om de kans te minimaliseren dat beide VM's in één keer niet beschikbaar zijn. Als er een grote storing in het datacenter optreedt, kunnen beide VM's echter uitvallen. In deze zeldzame gevallen gaan uw gegevens verloren. Overweeg om gegevenspersistentie en geo-replicatie te gebruiken om de gegevensbeveiliging te verbeteren tegen infrastructuurfouten.