0Pricing
AWS Solutions Architect · Lezione

Redis e Memcached: scegliere il motore giusto

Confrontare Redis (persistenza, replica, set ordinati, pub/sub) con Memcached (semplicità, multithreading) e scegliere in base ai requisiti del caso d'uso

Redis e Memcached: scegliere il motore giusto è una lezione AWS Solutions Architect gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AWS Solutions Architect, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AWS Solutions Architect include 4 lezioni in totale.

Che cos'è Amazon ElastiCache

Amazon ElastiCache è un servizio di caching in memoria completamente gestito che semplifica la distribuzione, la gestione e la scalabilità nel cloud dei più diffusi data store open source in memoria. Supporta due motori: Redis e Memcached. Servendo dalla memoria i dati richiesti più frequentemente invece di recuperarli da un database, ElastiCache può ridurre di diversi ordini di grandezza il carico sul database e diminuire la latenza delle risposte da millisecondi a microsecondi. La scelta tra Redis e Memcached è una domanda comune dell'esame SAA-C03.

Memcached: la semplicità assoluta

Memcached è un key-value store distribuito e in memoria, progettato per la semplicità e la scalabilità orizzontale. Caratteristiche principali: multi-thread (può utilizzare tutti i core della CPU di un singolo nodo), archiviazione semplice chiave-valore (solo stringhe, senza strutture dati complesse), nessuna persistenza (i dati vengono persi al riavvio di un nodo), nessuna replica (nessun nodo standby o replica) e sharding orizzontale tramite consistent hashing lato client. Memcached è la scelta corretta quando è necessaria una cache semplice e su larga scala, senza esigenze di persistenza, tipi di dati complessi o alta disponibilità.

# 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: data store in memoria ricco di funzionalità

Redis (Remote Dictionary Server) è un data store in memoria a thread singolo (per istanza) e ricco di funzionalità, che supporta stringhe, hash, liste, set, set ordinati, bitmap, HyperLogLog, stream e indici geospaziali. I principali vantaggi rispetto a Memcached sono: persistenza opzionale (snapshot AOF e RDB), replica (read replica e failover automatico), messaggistica pub/sub, scripting Lua, transazioni (MULTI/EXEC) e modalità cluster per lo sharding orizzontale. Redis è la scelta corretta per la maggior parte degli scenari reali di caching.

# 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

Persistenza di Redis: AOF e RDB

Redis supporta due meccanismi di persistenza: RDB (Redis Database) — snapshot periodici di un preciso momento, salvati su disco a intervalli configurabili (riavvii rapidi, ma possibile perdita dei dati modificati tra uno snapshot e l'altro). AOF (Append-Only File) — registra ogni operazione di scrittura; al riavvio Redis riproduce il log per ricostruire lo stato (maggiore durabilità, a fronte di file più grandi e riavvii più lenti). In ElastiCache può abilitare AOF per mantenere i dati tra i riavvii dei nodi. Questo è fondamentale quando ElastiCache viene utilizzato non solo come cache, ma come data store primario, ad esempio per i dati di sessione.

# 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

Replica di Redis e failover automatico

Redis supporta i gruppi di replica con un nodo primario che gestisce tutte le scritture e fino a 5 read replica che gestiscono le letture. Con Multi-AZ e failover automatico abilitati, ElastiCache promuove automaticamente una read replica a nodo primario quando il primario ha un guasto, completando in genere il failover in meno di 60 secondi. In questo modo le applicazioni basate su Redis ottengono un'elevata disponibilità che Memcached non può offrire (Memcached non supporta la replica). Per le applicazioni di produzione che richiedono il caching ad alta disponibilità, utilizzi sempre Redis con failover automatico.

# 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

Set ordinati di Redis per le classifiche

I set ordinati sono una delle strutture dati più potenti di Redis. Ogni elemento ha un punteggio a virgola mobile associato e gli elementi vengono mantenuti sempre in ordine. Questo rende i set ordinati ideali per le classifiche (ordinamento per punteggio), le code con priorità (elaborazione prima dei processi con priorità più alta) e il rate limiting (finestra scorrevole con timestamp usati come punteggi). Le operazioni ZADD, ZRANGE, ZREVRANGE, ZRANK e ZRANGEBYSCORE sono tutte O(log n): estremamente efficienti anche con milioni di elementi.

# 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 per la messaggistica

Il pub/sub di Redis consente ai publisher di trasmettere messaggi ai canali senza sapere chi vi è iscritto. I subscriber ricevono in tempo reale tutti i messaggi pubblicati sui canali a cui sono iscritti. I messaggi pub/sub non vengono resi persistenti: se un subscriber è offline, perde il messaggio. Per una messaggistica persistente con consegna garantita, utilizzi Redis Streams (una struttura dati più robusta aggiunta in Redis 5) oppure un servizio di messaggistica dedicato come SQS o SNS. Per l'esame SAA-C03, Redis pub/sub è un'opzione per notifiche leggere e in tempo reale tra servizi.

# 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 e Redis: tabella decisionale

Utilizzi questo criterio per scegliere in vista dell'esame SAA-C03: scelga Memcached quando Le serve una cache semplice senza requisiti di HA, prestazioni multi-thread e scalabilità orizzontale tramite l'aggiunta di nodi (cache pura). Scelga Redis quando Le servono: persistenza (session store), replica e failover (HA), tipi di dati complessi (set ordinati per classifiche, set, liste), pub/sub, transazioni Lua o la Cluster Mode per la scalabilità orizzontale su più shard. Se la domanda d'esame menziona una funzionalità che va oltre il semplice caching chiave-valore, la risposta è quasi sempre Redis.

Tipi e famiglie di nodi cache

ElastiCache offre diverse famiglie di tipi di nodo: r7g (Graviton 3, ottimizzata per la memoria: miglior rapporto prezzo/prestazioni, consigliata per la maggior parte dei casi di caching), m7g (calcolo e memoria bilanciati) e t4g (a prestazioni espandibili, a basso costo per sviluppo e test). Le dimensioni dei nodi vanno da cache.t4g.micro (500 MB) a cache.r7g.16xlarge (425 GB). In produzione, scelga una dimensione che mantenga il dataset in memoria con un margine del 20-25%. L'esaurimento della memoria causa eviction (Memcached) o errori OOM (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

Sicurezza di ElastiCache

ElastiCache viene distribuito all'interno del Suo VPC, con i security group che controllano l'accesso: per impostazione predefinita non è previsto alcun accesso tramite Internet pubblico. Per Redis, abiliti i token AUTH (una password che i client devono fornire) e la crittografia in transito (TLS) per le connessioni, oltre alla crittografia a riposo tramite KMS. Per Memcached è disponibile solo la crittografia TLS in transito (non la crittografia a riposo né AUTH). Quando esegue la migrazione da Redis non crittografato a Redis crittografato, non è possibile effettuare una migrazione in-place: deve creare un nuovo cluster crittografato e precaricarlo.

# 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

Policy di eviction

Quando una cache Redis o Memcached è piena, la policy di eviction determina quali chiavi rimuovere per liberare spazio. Policy di eviction comuni di Redis: noeviction (restituisce un errore OOM: utile quando la cache è il data store primario), allkeys-lru (rimuove la chiave usata meno di recente tra tutte le chiavi: utile per una cache generica), volatile-lru (applica LRU alle chiavi con TTL impostato: preserva le chiavi senza scadenza), allkeys-random (rimozione casuale), allkeys-lfu (rimuove la chiave usata meno frequentemente). Per i casi d'uso tipici del caching, sono consigliate allkeys-lru o 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

Verifica rapida

Verifichi la Sua comprensione dei concetti di AWS Solutions Architect (SAA-C03) trattati in questa lezione.

Riepilogo della lezione

In questa lezione ha imparato che: Memcached è semplice, multi-thread e non offre HA, quindi è ideale per la scalabilità orizzontale pura di cache semplici; Redis supporta strutture dati complesse, persistenza, pub/sub e failover Multi-AZ, quindi è la scelta migliore per la maggior parte degli scenari di caching in produzione; inoltre, i set ordinati rendono Redis la scelta naturale per classifiche e code con priorità. Ora esamineremo i gruppi di replica Redis e la Cluster Mode per lo sharding orizzontale.

Domande Frequenti

La lezione «Redis e Memcached: scegliere il motore giusto» è gratuita?

Sì — il testo completo di «Redis e Memcached: scegliere il motore giusto» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AWS Solutions Architect, passa a CoddyKit PRO. Il corso AWS Solutions Architect include 4 lezioni in totale.

Cosa imparerò in «Redis e Memcached: scegliere il motore giusto»?

Confrontare Redis (persistenza, replica, set ordinati, pub/sub) con Memcached (semplicità, multithreading) e scegliere in base ai requisiti del caso d'uso Eserciti AWS Solutions Architect con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare AWS Solutions Architect?

Non è richiesta alcuna esperienza precedente. AWS Solutions Architect su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Redis e Memcached: scegliere il motore giusto»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione AWS Solutions Architect?

Sì. Ogni lezione AWS Solutions Architect include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Redis e Memcached: scegliere il motore giusto
  2. Gruppi di replica Redis e modalità cluster di ElastiCache
  3. Strategie di caching: lazy loading e write-through
  4. Archiviazione delle sessioni e pattern per le classifiche
← Torna a AWS Solutions Architect