Redis is een op geheugen gebaseerd databasemodel, dus geheugenbeheer heeft een belangrijke invloed op de systeemprestaties. Wanneer gegevens continu in het geheugen worden opgeslagen, kan er een geheugen tekort optreden. In deze post bespreken we de belangrijkste instellingen en methoden voor geheugenbeheer en prestatieoptimalisatie in Redis.

1. Het belang van geheugenbeheer in Redis

Redis slaat alle gegevens in het geheugen op voor een snelle verwerking. Wanneer er een grote hoeveelheid gegevens wordt opgeslagen of wanneer er voortdurend schrijfbewerkingen plaatsvinden, kan er een geheugen tekort optreden dat de prestaties verstoort. Om dit probleem te voorkomen, biedt Redis de maxmemory en maxmemory-policy instellingen.

Infographic over geheugenbeheer in Redis

2. Instelling van geheugenlimieten: maxmemory

Om de maximale geheugengebruik te beperken, stel je maxmemory in. Met deze instelling kun je het geheugenvolume dat Redis kan gebruiken nauwkeurig specificeren. Als de maxmemory instelling ontbreekt, kan het systeemgeheugen volledig worden gebruikt.

maxmemory 256mb  # Bijv.: instellen op 256MB

Als het opgegeven geheugengrens wordt overschreden, kan Redis automatisch oude gegevens verwijderen volgens de gegevensverwijderingspolicy.

3. Instelling van gegevensverwijderingspolicy: maxmemory-policy

De policy die bepaalt welke gegevens verwijderd moeten worden bij het overschrijden van de geheugengrens is maxmemory-policy. Redis biedt verschillende verwijderingsstrategieën en de belangrijkste opties zijn:

  • noeviction: Weigert het opslaan van nieuwe gegevens om dataverlies te minimaliseren
  • allkeys-lru: Verwijdert de meest recent niet gebruikte sleutel uit alle sleutels, geschikt voor cachen
  • volatile-lru: Verwijdert de meest recent niet gebruikte sleutel uit sleutels met een vervaltijd
  • allkeys-random: Verwijdert gegevens willekeurig uit alle sleutels
  • volatile-ttl: Verwijdert de sleutel met de kortste resterende tijd tot verval

Om bijvoorbeeld de LRU-policy in te stellen die oude gegevens uit alle sleutels verwijdert, geef je de volgende instelling op.

maxmemory-policy allkeys-lru

4. Instelling van geheugenoptimalisatie: maxmemory-samples

De maxmemory-samples optie stelt het aantal te monsteren gegevens in die moeten worden verwijderd volgens het geheugenbeleid, en de standaardwaarde is 5. Een hoger monster aantal leidt tot een nauwkeuriger beleid, maar kan meer CPU-bronnen verbruiken.

maxmemory-samples 5

5. Instelling van TTL voor gegevenscompressie en -verwijdering

Redis kan TTL (Time To Live) instellen voor elke sleutel, en wanneer een bepaalde sleutel vervalt, wordt deze automatisch verwijderd om geheugen vrij te maken. Dit is nuttig voor sessiebeheer of cached gegevens.

EXPIRE <key> <seconds>  # Bijv.: verval van session_data na 1 uur

Gegevens met een TTL-vervaldatum worden automatisch verwijderd na verloop van tijd, wat effectief is voor geheugenbesparing.

6. Geheugenmonitoring en prestatiecontrole-opdrachten

Redis biedt opdrachten om de geheugenstatus te monitoren en de prestaties te controleren.

  • INFO memory: Controleer het totale geheugengebruik
  • MEMORY USAGE <key>: Controleer het geheugenverbruik van een specifieke sleutel
  • MEMORY STATS: Biedt gedetailleerde geheugenstatistieken aan
  • SLOWLOG: Controleer langzame opdrachten voor prestatiecontrole
redis-cli INFO memory
redis-cli MEMORY USAGE session_data
redis-cli SLOWLOG GET

7. Praktijkvoorbeeld: Geheugenoptimalisatie van Redis voor cachegegevens en werklijsten

In Redis kunnen cachegegevens automatisch worden verwijderd met behulp van de allkeys-lru policy. Aan de andere kant, wanneer gegevensbehoud belangrijk is, zoals bij een werklijst, kan de noeviction policy worden ingesteld en kan de AOF (Append-Only File) functie worden gebruikt om dataverlies te voorkomen.

maxmemory 256mb
maxmemory-policy allkeys-lru  # Geschikt voor cachegegevens

appendonly yes
appendfsync everysec
maxmemory-policy noeviction  # Geschikt voor werklijsten

Conclusie

We hebben de methoden voor geheugenbeheer en prestatieoptimalisatie van Redis bekeken. Aangezien Redis een op geheugen gebaseerd database is, is de instelling van geheugenbeheer van groot belang en kan dit de prestaties en gegevensbehoud beïnvloeden. In de volgende aflevering behandelen we hoe we Redis-containers met Docker kunnen gebruiken. Laten we leren hoe we Redis als een onafhankelijke container kunnen instellen voor efficiënte gegevensbehoud en prestatie.