AWS Solutions Architect · Lektion

Redis kontra Memcached: Valg af den rigtige motor

Sammenlign Redis (persistens, replikering, sorterede sæt, pub/sub) med Memcached (enkelhed, flertrådning), og vælg ud fra kravene til anvendelsesområdet

Lektion 1 af 413 trin

Redis kontra Memcached: Valg af den rigtige motor er en gratis AWS Solutions Architect-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i AWS Solutions Architect, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. AWS Solutions Architect-kurset indeholder 4 lektioner i alt.

Hvad er Amazon ElastiCache?

Amazon ElastiCache er en fuldt administreret cachingtjeneste i hukommelsen, der gør det nemt at implementere, administrere og skalere populære open source-datalagre i hukommelsen i skyen. Den understøtter to motorer: Redis og Memcached. Ved at levere data, der ofte efterspørges, fra hukommelsen i stedet for fra en database kan ElastiCache reducere belastningen på databasen med flere størrelsesordener og sænke svartiden fra millisekunder til mikrosekunder. Valget mellem Redis og Memcached er et almindeligt eksamensspørgsmål i SAA-C03.

Memcached: Ren enkelhed

Memcached er et distribueret nøgle-værdi-lager i hukommelsen med fokus på enkelhed og horisontal skalerbarhed. Vigtige kendetegn er: flertrådet (kan bruge alle CPU-kerner på en enkelt node), enkel nøgle-værdi-lagring (kun strenge, ingen komplekse datastrukturer), ingen persistens (data går tabt, når en node genstarter), ingen replikering (ingen standby eller replikaer) og horisontal partitionering via konsistent hashing på klientsiden. Memcached er det rigtige valg, når du har brug for en enkel cache i stor skala og ikke har behov for persistens, komplekse datatyper eller høj tilgængelighed.

# Create a Memcached cluster with 3 nodes
aws elasticache create-cache-cluster \
  --cache-cluster-id my-memcached \
  --engine memcached \
  --cache-node-type cache.r7g.large \
  --num-cache-nodes 3 \
  --cache-subnet-group-name my-subnet-group

# Memcached auto-discovers nodes via the config endpoint
# Application connects to: my-memcached.cfg.use1.cache.amazonaws.com:11211

Redis: Funktionsrigt lager i hukommelsen

Redis (Remote Dictionary Server) er et funktionsrigt datastrukturlager i hukommelsen, der bruger én tråd (pr. instans) og understøtter strenge, hashes, lister, mængder, sorterede mængder, bitmaps, HyperLogLogs, streams og geospatiale indekser. Vigtige fordele frem for Memcached er: valgfri persistens (AOF- og RDB-snapshots), replikering (læse-replikaer og automatisk failover), pub/sub-meddelelser, Lua-scripting, transaktioner (MULTI/EXEC) og klyngetilstand til horisontal partitionering. Redis er det rigtige valg i de fleste virkelige cachesituationer.

# Redis data structure examples

# String
# SET user:1:name 'Alice'
# GET user:1:name

# Hash (object-like)
# HSET product:42 name 'Widget' price '9.99' stock '100'
# HGETALL product:42

# Sorted set (leaderboard)
# ZADD leaderboard 9500 'alice' 8700 'bob' 9100 'carol'
# ZREVRANGE leaderboard 0 2 WITHSCORES

# Pub/Sub
# PUBLISH notifications 'order_shipped:12345'
# SUBSCRIBE notifications

Redis-persistens: AOF og RDB

Redis understøtter to persistensmekanismer: RDB (Redis Database) — periodiske snapshots af et bestemt tidspunkt, der gemmes på disken med konfigurerbare intervaller (hurtige genstarter, men data mellem snapshots kan gå tabt). AOF (Append-Only File) — logger hver skrivehandling; ved en genstart afspiller Redis loggen for at genopbygge tilstanden (datavedholdenhed på bekostning af større filer og langsommere genstarter). I ElastiCache kan du aktivere AOF for at bevare data på tværs af genstarter af noder. Det er afgørende, når ElastiCache ikke kun bruges som cache, men som primært datalager, f.eks. til sessionsdata.

# Create an ElastiCache Redis cluster with AOF enabled
aws elasticache create-replication-group \
  --replication-group-id my-redis \
  --replication-group-description 'Redis with persistence' \
  --cache-node-type cache.r7g.large \
  --engine redis \
  --num-cache-clusters 2 \
  --cache-parameter-group-name default.redis7 \
  --snapshot-retention-limit 5

# Note: Enable AOF via parameter group: appendonly=yes

Redis-replikering og automatisk failover

Redis understøtter replikagrupper med én primær node, der håndterer alle skrivninger, og op til 5 læse-replikaer, der håndterer læsninger. Når Multi-AZ og automatisk failover er aktiveret, promoverer ElastiCache automatisk en læse-replika til primær node, når den primære node svigter — failoveren gennemføres typisk på under 60 sekunder. Det giver Redis-baserede applikationer en høj tilgængelighed, som Memcached ikke kan matche (Memcached har ingen replikering). Til produktionsapplikationer, der kræver caching med høj tilgængelighed, skal du altid bruge Redis med automatisk failover.

# Create a Redis replication group with Multi-AZ failover
aws elasticache create-replication-group \
  --replication-group-id prod-redis \
  --description 'Production Redis with HA' \
  --cache-node-type cache.r7g.xlarge \
  --engine redis \
  --multi-az-enabled \
  --automatic-failover-enabled \
  --num-cache-clusters 3 \
  --cache-subnet-group-name multi-az-subnet-group

# 1 primary + 2 replicas across 3 AZs

Redis-sorterede mængder til ranglister

Sorterede mængder er en af Redis' mest effektive datastrukturer. Hvert medlem har en tilknyttet flydende kommatals-score, og medlemmerne holdes altid i sorteret rækkefølge. Det gør sorterede mængder ideelle til ranglister (rangordning efter score), prioritetskøer (behandling af job med højest prioritet først) og hastighedsbegrænsning (glidende vindue med tidsstempler som scores). Handlingerne ZADD, ZRANGE, ZREVRANGE, ZRANK og ZRANGEBYSCORE har alle kompleksiteten O(log n) — ekstremt effektivt selv for millioner af poster.

# Leaderboard operations using Redis sorted sets

# Add/update scores
# ZADD game:leaderboard 10500 'player:alice'
# ZADD game:leaderboard 9800  'player:bob'
# ZADD game:leaderboard 11200 'player:carol'

# Get top 3 players (highest scores first)
# ZREVRANGE game:leaderboard 0 2 WITHSCORES
# Result: carol 11200, alice 10500, bob 9800

# Get a player's rank (0-indexed)
# ZREVRANK game:leaderboard 'player:alice'
# Result: 1 (second place)

Redis-pub/sub til meddelelser

Redis pub/sub gør det muligt for udgivere at udsende meddelelser til kanaler uden at vide, hvem der abonnerer. Abonnenter modtager i realtid alle meddelelser, der udgives til de kanaler, de abonnerer på. Pub/sub-meddelelser gemmes ikke — hvis en abonnent er offline, går meddelelsen tabt. Til vedvarende meddelelser med garanteret levering skal du bruge Redis Streams (en mere robust datastruktur, der blev tilføjet i Redis 5) eller en specialiseret meddelelsestjeneste som SQS eller SNS. Til SAA-C03-eksamen er Redis-pub/sub en mulighed for letvægtsmeddelelser i realtid mellem tjenester.

# Publisher side (broadcasts to 'notifications' channel)
# PUBLISH notifications '{"type":"order_shipped","orderId":"12345"}'

# Subscriber side (listens for messages)
# SUBSCRIBE notifications

# Pattern subscribe (wildcard channel matching)
# PSUBSCRIBE order:*
# Receives messages from: order:created, order:shipped, order:delivered

# Note: Unlike SQS, pub/sub is fire-and-forget — no acknowledgement

Memcached eller Redis: Beslutningstabel

Brug denne fremgangsmåde til at vælge til SAA-C03-eksamen: Vælg Memcached, når du har brug for en enkel cache uden krav om høj tilgængelighed, flertrådet ydeevne og horisontal skalering ved at tilføje noder (ren cache). Vælg Redis, når du har brug for: persistens (sessionslager), replikering og failover (høj tilgængelighed), komplekse datatyper (sorterede mængder til ranglister, mængder og lister), pub/sub, Lua-transaktioner eller klyngetilstand til horisontal skalering med flere shards. Hvis eksamensspørgsmålet nævner en funktion ud over simpel nøgle-værdi-caching, er Redis næsten altid svaret.

Cache-nodetyper og -familier

ElastiCache tilbyder flere nodetypefamilier: r7g (Graviton 3, hukommelsesoptimeret — bedste pris/ydeevne-forhold, anbefales til de fleste caches), m7g (afbalanceret CPU og hukommelse) og t4g (burstable, lave omkostninger til udvikling/test). Nodestørrelserne går fra cache.t4g.micro (500 MB) til cache.r7g.16xlarge (425 GB). I produktion skal du vælge en nodestørrelse, der holder datasættet i hukommelsen med 20-25 % reserve. Hvis hukommelsen løber tør, opstår der udsættelser (Memcached) eller OOM-fejl (Redis).

# Get available cache node types
aws elasticache describe-cache-engine-versions \
  --engine redis \
  --query 'CacheEngineVersions[?contains(EngineVersion, '7')].{Engine:Engine,Version:EngineVersion}'

# Check memory and vCPU for a node type
aws elasticache describe-cache-engine-versions \
  --cache-parameter-group-family redis7

# Monitor evictions to detect memory pressure
# CloudWatch: Evictions metric > 0 means cache is full

ElastiCache-sikkerhed

ElastiCache implementeres i din VPC, hvor sikkerhedsgrupper styrer adgangen — som standard er der ingen adgang fra det offentlige internet. For Redis skal du aktivere AUTH-tokens (en adgangskode, som klienterne skal angive) og kryptering under transport (TLS) for forbindelser samt kryptering i hvile ved hjælp af KMS. For Memcached er kun TLS under transport tilgængelig (ingen kryptering i hvile eller AUTH). Når du migrerer fra ukrypteret til krypteret Redis, kan migreringen ikke foretages på stedet — du skal oprette en ny krypteret klynge og varme den op.

# Create a Redis cluster with TLS and AUTH token
aws elasticache create-replication-group \
  --replication-group-id secure-redis \
  --description 'Encrypted Redis' \
  --cache-node-type cache.r7g.large \
  --engine redis \
  --transit-encryption-enabled \
  --at-rest-encryption-enabled \
  --auth-token 'MySecretPassword123!'

# Store the AUTH token in Secrets Manager, not in your app code

Udsættelsespolitikker

Når en Redis- eller Memcached-cache er fuld, bestemmer udsættelsespolitikken, hvilke nøgler der fjernes for at skabe plads. Almindelige Redis-udsættelsespolitikker er: noeviction (returnerer en OOM-fejl — velegnet, når cachen er det primære lager), allkeys-lru (udsætter de mindst nyligt anvendte blandt alle nøgler — velegnet til generelle caches), volatile-lru (LRU blandt nøgler med angivet TTL — bevarer nøgler, der ikke udløber), allkeys-random (tilfældig udsættelse) og allkeys-lfu (mindst hyppigt anvendte). Til typiske caching-scenarier anbefales allkeys-lru eller allkeys-lfu.

# Set eviction policy via parameter group
aws elasticache create-cache-parameter-group \
  --cache-parameter-group-name redis7-lru \
  --cache-parameter-group-family redis7 \
  --description 'LRU eviction policy'

aws elasticache modify-cache-parameter-group \
  --cache-parameter-group-name redis7-lru \
  --parameter-name-values ParameterName=maxmemory-policy,ParameterValue=allkeys-lru

# Apply the parameter group to your cluster:
aws elasticache modify-replication-group \
  --replication-group-id prod-redis \
  --cache-parameter-group-name redis7-lru

Hurtigt tjek

Afprøv din forståelse af begreberne i AWS Solutions Architect (SAA-C03) fra denne lektion.

Opsummering af lektionen

I denne lektion lærte du, at Memcached er enkel, flertrådet og ikke har høj tilgængelighed — bedst til ren horisontal skalering af simple caches, at Redis understøtter komplekse datastrukturer, persistens, pub/sub og Multi-AZ-failover — bedst til de fleste caching-scenarier i produktion, og at sorterede mængder gør Redis til det naturlige valg til ranglister og prioritetskøer. Næste gang udforsker vi Redis-replikagrupper og klyngetilstand til horisontal partitionering.

Gratis at komme i gang

Lær AWS Solutions Architect med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “Redis kontra Memcached: Valg af den rigtige motor” gratis?

Ja — alle 3 lektioner i læringssporet AWS Solutions Architect, inklusive “Redis kontra Memcached: Valg af den rigtige motor”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. AWS Solutions Architect-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Redis kontra Memcached: Valg af den rigtige motor”?

Sammenlign Redis (persistens, replikering, sorterede sæt, pub/sub) med Memcached (enkelhed, flertrådning), og vælg ud fra kravene til anvendelsesområdet Du øver dig i AWS Solutions Architect med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på AWS Solutions Architect?

Der kræves ingen tidligere erfaring. AWS Solutions Architect på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Redis kontra Memcached: Valg af den rigtige motor”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne AWS Solutions Architect-lektion?

Ja. Alle AWS Solutions Architect-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Redis kontra Memcached: Valg af den rigtige motor
  2. ElastiCache Redis-replikationsgrupper og klyngetilstand
  3. Cachingstrategier: Lazy Loading og Write-Through
  4. Sessionslagring og leaderboard-mønstre
← Tilbage til AWS Solutions Architect