Hoe problemen met Redis oplossen

Introductie

Redis is een open-source, in-memory key-value data store. Het wordt geleverd met verschillende commando’s die kunnen helpen bij het oplossen van problemen en debuggen. Vanwege de aard van Redis als een in-memory key-value store, richten veel van deze commando’s zich op geheugenbeheer, maar er zijn ook andere die waardevol zijn om een overzicht te krijgen van de status van uw Redis-server. Deze tutorial geeft details over hoe u enkele van deze commando’s kunt gebruiken om problemen te diagnosticeren en op te lossen die zich kunnen voordoen tijdens het gebruik van Redis.

Hoe dit handboek te gebruiken

Dit handboek is geschreven als een spiekbriefje met zelfstandige voorbeelden. We raden u aan om naar elk gedeelte te springen dat relevant is voor de taak die u probeert te voltooien.

De commando’s die in dit handboek worden getoond, zijn getest op een Ubuntu 22.04-server met Redis-versie 6.0.16. Om een vergelijkbare omgeving in te stellen, kunt u Stap 1 volgen van onze handleiding over Hoe Redis installeren en beveiligen op Ubuntu 22.04. We zullen demonstreren hoe deze commando’s zich gedragen door ze uit te voeren met redis-cli, de command-line interface van Redis. Als u een andere Redis-interface gebruikt, zoals Redli, kan de exacte uitvoer van bepaalde commando’s verschillen.

Alternatief kunt u een beheerde Redis-database-instantie provisioneren om deze commando’s te testen, maar afhankelijk van het niveau van controle dat uw databaseprovider toestaat, werken sommige commando’s in deze handleiding mogelijk niet zoals beschreven. Om een DigitalOcean Managed Database te provisioneren, volgt u onze documentatie voor Beheerde Databases. Vervolgens moet u ofwel Redli installeren of een TLS-tunnel opzetten om verbinding te maken met de Beheerde Database via TLS.

memory usage geeft aan hoeveel geheugen momenteel wordt gebruikt door een enkele sleutel. Het neemt de naam van een sleutel als argument en geeft het aantal bytes uit dat het gebruikt. Stel eerst een voorbeeldvariabele in:

  1. set key_meaningOfLife "Food"

Vervolgens controleert u het geheugen met memory usage:

  1. memory usage key_meaningOfLife
Output
(integer) 88

Voor een algemener begrip van hoe uw Redis-server geheugen gebruikt, kunt u het commando memory stats uitvoeren:

  1. memory stats

Dit commando geeft een array van geheugen-gerelateerde metrieken en hun waarden weer. De volgende metrieken worden gerapporteerd door memory stats:

  • peak.allocated: Het piekaantal bytes verbruikt door Redis
  • total.allocated: Het totale aantal bytes toegewezen door Redis
  • startup.allocated: Het initiële aantal bytes verbruikt door Redis bij het opstarten
  • replication.backlog: De grootte van de replicatieachterstand, in bytes
  • clients.slaves: De totale grootte van alle replica overhead, wat betekent de uitvoer- en querybuffers en verbindingsteksten
  • clients.normal: De totale grootte van alle clientoverheads
  • aof.buffer: De totale grootte van de huidige en herschrijf alleen toevoegen buffers
  • db.0: De overheads van de hoofd- en vervaldictionaires voor elke database in gebruik op de server, gerapporteerd in bytes
  • overhead.total: De som van alle overheads die worden gebruikt om de keyruimte van Redis te beheren
  • keys.count: Het totale aantal keys opgeslagen in alle databases op de server
  • keys.bytes-per-key: De verhouding tussen het netto geheugengebruik van de server en keys.count
  • dataset.bytes: De grootte van de dataset, in bytes
  • dataset.percentage: Het percentage van het netto geheugengebruik van Redis ingenomen door dataset.bytes
  • peak.percentage: Het percentage van peak.allocated uit total.allocated
  • fragmentatie: De verhouding van de hoeveelheid geheugen die momenteel in gebruik is, gedeeld door het fysieke geheugen dat Redis daadwerkelijk gebruikt.

memory malloc-stats biedt een interne statistiekrapportage van jemalloc, de geheugenallocator die door Redis wordt gebruikt op Linux-systemen:

  1. memory malloc-stats

Als het lijkt alsof u te maken heeft met geheugen gerelateerde problemen, maar het parseren van de uitvoer van de vorige commando’s blijkt niet nuttig te zijn, kunt u memory doctor proberen uit te voeren:

  1. memory doctor

Deze functie geeft eventuele geheugenverbruiksproblemen weer die het kan vinden en suggereert mogelijke oplossingen.

Algemene informatie over uw Redis-instantie krijgen

A debugging command that isn’t directly related to memory management is monitor. This command allows you to review a constant stream of every command processed by the Redis server:

  1. monitor
Output
OK 1566157213.896437 [0 127.0.0.1:47740] "auth" "foobared" 1566157215.870306 [0 127.0.0.1:47740] "set" "key_1" "878"

Nog een nuttig commando voor debugging is info, dat verschillende blokken informatie en statistieken over de server teruggeeft:

  1. info
Output
# Server redis_version:6.0.16 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:a3fdef44459b3ad6 redis_mode:standalone os:Linux 5.15.0-41-generic x86_64 . . .

Dit commando retourneert veel informatie. Als u slechts één informatieblok wilt retourneren, kunt u dit specificeren als argument voor info:

  1. info CPU
Output
# CPU used_cpu_sys:173.16 used_cpu_user:70.89 used_cpu_sys_children:0.01 used_cpu_user_children:0.04

Merk op dat de informatie die wordt geretourneerd door het info-commando afhankelijk zal zijn van welke versie van Redis u gebruikt.

Het keys-commando gebruiken

De keys opdracht is nuttig in gevallen waarin je de naam van een sleutel bent vergeten, of misschien heb je er een gemaakt maar per ongeluk de naam verkeerd gespeld. keys zoekt naar sleutels die overeenkomen met een patroon:

  1. keys pattern

De volgende glob-stijl variabelen worden ondersteund:

  • ? is een jokerteken dat staat voor elk enkel karakter, dus s?mmy past bij sammy, sommy, en sqmmy
  • * is een jokerteken dat staat voor elk aantal karakters, inclusief helemaal geen karakters, dus sa*y past bij sammy, say, sammmmmmy, en salmony
  • Je kunt twee of meer karakters specificeren die het patroon kan bevatten door ze in haken te plaatsen, dus s[ai]mmy zal overeenkomen met sammy en simmy, maar niet met summy
  • Om een jokerteken in te stellen dat één of meer letters negeert, plaats je ze in haken en ga je ervoor met een dakje (^), dus s[^oi]mmy zal overeenkomen met sammy en sxmmy, maar niet met sommy of simmy
  • Om een jokerteken in te stellen dat een reeks letters omvat, scheid je het begin en einde van de reeks met een streepje en plaats je het in haken, dus s[a-o]mmy zal overeenkomen met sammy, skmmy, en sommy, maar niet met srmmy

Waarschuwing: De Redis documentatie waarschuwt dat keys bijna nooit gebruikt zou moeten worden in een productieomgeving omdat het een grote negatieve invloed kan hebben op de prestaties.

Conclusie

Deze handleiding beschrijft een aantal commando’s die handig zijn voor het oplossen van problemen en het oplossen van problemen die zich kunnen voordoen bij het werken met Redis. Als er andere gerelateerde commando’s, argumenten of procedures zijn die u wilt leren kennen in deze handleiding, vraag dan of doe suggesties in de opmerkingen.

Voor meer informatie over Redis-commando’s, bekijk onze zelfstudie-serie over Hoe een Redis-database te beheren.

Source:
https://www.digitalocean.com/community/cheatsheets/how-to-troubleshoot-issues-in-redis