Redis tiene i dati in memoria e risponde in circa un millisecondo, ed è per questo che sta dietro a tante app come cache, coda o archivio delle sessioni. L'installazione è un comando. Il lavoro sta nelle impostazioni di default: nessun limite di memoria, istantanee che possono perdere le scritture recenti e due errori facili che cancellano i dati o disattivano la password senza che te ne accorga. Questa guida copre tutto su Ubuntu 24.04. Abbiamo eseguito ogni passaggio sulla nostra immagine; i numeri vengono da un server Micro (2 vCPU, 2 GB).
Ti serve un utente con sudo. La guida alla configurazione di Ubuntu ne crea uno.
1. Installare
sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping
L'installazione ha richiesto 13 secondi e ci ha dato Redis 7.0.15. Parte subito e a ogni avvio, risponde PONG e ascolta solo sul server stesso: 127.0.0.1:6379 e [::1]:6379, con protected-mode yes. Senza dati usava 13,5 MB di RAM.
Il log conteneva già un avviso:
WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.
Redis salva su disco da una copia di sé creata con fork, e con l'impostazione predefinita del kernel quel fork può fallire quando la memoria scarseggia. Correggilo una volta:
echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/90-redis.conf
sudo sysctl -p /etc/sysctl.d/90-redis.conf
sudo systemctl restart redis-server
Dopo il riavvio l'avviso era sparito.
2. Limitare la memoria
Di fabbrica maxmemory vale 0, cioè nessun limite, e la politica è noeviction. Redis continuerà a prendere RAM finché il server non la esaurisce. Fissa un tetto e decidi cosa succede quando viene raggiunto:
redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE
Abbiamo provato entrambe le politiche con un limite di 64 MB e 400.000 scritture:
noeviction(default): la memoria si è fermata a 63 MB e le nuove scritture fallivano conOOM command not allowed when used memory > 'maxmemory'. Giusta per una coda o per tutto ciò che non puoi perdere.allkeys-lru: Redis ha scartato le chiavi usate meno di recente, 48.606, e ogni scrittura è andata a buon fine. Giusta per una cache.
CONFIG REWRITE salva le impostazioni correnti in /etc/redis/redis.conf, così sopravvivono a un riavvio. Aggiunge anche una riga che devi conoscere prima del passaggio 4.
3. Scegliere come salvare su disco
Di default Redis scrive un'istantanea (/var/lib/redis/dump.rdb) dopo 1 modifica in un'ora, 100 in cinque minuti o 10.000 in un minuto. Abbiamo provato tre modi di fermarlo:
| Come si è fermato Redis | Solo istantanee (default) | Con il file AOF |
|---|---|---|
systemctl restart | Niente perso: salva allo spegnimento | Niente perso |
Ucciso con kill -9 | La chiave scritta dopo l'ultima istantanea era sparita | Una chiave scritta 2 secondi prima c'era |
In entrambi i casi systemd ha riavviato Redis da solo in pochi secondi.
Se Redis contiene dati che ti mancherebbero, attiva il file AOF (append-only file). Registra ogni scrittura e la scarica su disco una volta al secondo. Fallo sul server in funzione, non modificando il file:
redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_
Prima abbiamo provato l'altra strada, e ci è costata i dati. Abbiamo cambiato appendonly no in appendonly yes in redis.conf e riavviato. Redis è ripartito con un AOF vuoto e non ha caricato nulla dall'istantanea, quindi tutte le chiavi esistenti erano sparite. Allo spegnimento successivo ha anche scritto il suo nuovo contenuto, senza le vecchie chiavi, sopra dump.rdb. CONFIG SET lo evita: Redis scrive prima l'AOF dai dati in memoria. Dopo un riavvio tutte le nostre chiavi c'erano.
Se Redis è una cache pura che può ripartire vuota, fai il contrario e disattiva il salvataggio con redis-cli CONFIG SET save "".
4. Impostare una password
Ecco la seconda trappola. Dopo qualunque CONFIG REWRITE, Redis 7 aggiunge questa riga in fondo a redis.conf:
user default on nopass ~* &* +@all
Significa «l'utente predefinito non ha bisogno di password». Poi abbiamo aggiunto requirepass più in alto nel file e riavviato. Redis rispondeva ancora PONG senza password, perché la riga user ha la precedenza. Imposta invece la password tramite Redis:
REDIS_PASS=$(openssl rand -hex 24)
echo "$REDIS_PASS"
redis-cli CONFIG SET requirepass "$REDIS_PASS"
REDISCLI_AUTH="$REDIS_PASS" redis-cli CONFIG REWRITE
Conserva la password in un posto sicuro. Ora Redis la memorizza come hash SHA-256 in quella stessa riga user default. Dopo un riavvio redis-cli ping ha risposto NOAUTH Authentication required. e funzionava solo la password. Passala a redis-cli con la variabile REDISCLI_AUTH. Con -a compare nell'elenco dei processi, e redis-cli ti avvisa. Nella tua app mettila nell'URL di Redis: redis://:PASSWORD@127.0.0.1:6379/0.
5. Raggiungerlo dal tuo computer
Lascia Redis su 127.0.0.1 e usa un tunnel SSH. Usa la porta SSH del tuo server, che sui piani NAT è la tua porta personale:
ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22
Finché è attivo, redis-cli -p 6380 e gli strumenti desktop del tuo computer parlano con il Redis del server. Verso internet non si apre nulla di nuovo. Con la guida alle chiavi SSH il tunnel accede senza password.
Quanto è veloce
Sul server di prova Micro, redis-benchmark con 50 client ci ha dato:
| Test | Richieste al secondo | Latenza mediana |
|---|---|---|
| SET | 30.303 | 1,0 ms |
| GET | 35.149 | 0,9 ms |
| SET, 16 comandi per andata e ritorno | 272.109 | 2,4 ms |
| GET, 16 comandi per andata e ritorno | 414.938 | 1,3 ms |
Per la cache o la coda di job di un'app web è molto più di quanto ti servirà. La velocità in più viene dall'invio dei comandi a gruppi (pipelining).
Quale piano
Redis ha bisogno di RAM per i tuoi dati e di poco altro. Nano (2 vCPU, 1 GB, $3/mese) fa girare Redis accanto a una piccola app con maxmemory 256mb. Micro (2 GB, $5/mese) lascia spazio a una cache più grande più l'app. Se qualcos'altro deve collegarsi direttamente a Redis, usa un tuo IPv4 (da Nano-IP a $8/mese) e consenti solo quell'indirizzo nel firewall. Tutti i piani sono nella pagina VPS, e il pagamento è in USDT, USDC o ETH su Base, Ethereum o Polygon.
Commenti
Ancora nessun commento. Sii il primo.